BlogsModule={};

Overlord.assign({
	minion: "blogs:submit_new",
	click: function(event) {
		YAHOO.util.Event.preventDefault(event);
		YAHOO.util.Dom.get('new_blog').submit();
	}
});

Overlord.assign({
	minion: "blogs:youtube_close",
	click: function(event) {
		YAHOO.util.Event.preventDefault(event);
		NexopiaPanel.current.close();
	}
});


Overlord.assign({
	minion: "blogs:tip",
	click: function(event, element) {
		YAHOO.util.Event.preventDefault(event);
		var tip = element.nextSibling;
		if (tip) {
			if (YAHOO.util.Dom.getStyle(tip, 'display') == "none") {
				YAHOO.util.Dom.setStyle(tip, 'display', 'block');
			} else {
				YAHOO.util.Dom.setStyle(tip, 'display', 'none');
			}
		}
	}
});

Overlord.assign({
	minion: "blogs:options",
	click: function(event, element) {
		YAHOO.util.Event.preventDefault(event);
		var tip = element.nextSibling;
		if (tip) {
			if (YAHOO.util.Dom.getStyle(tip, 'display') == "none") {
				YAHOO.util.Dom.setStyle(tip, 'display', 'block');
				element.innerHTML = "Fewer Options";
				element.className = "collapse";
			} else {
				YAHOO.util.Dom.setStyle(tip, 'display', 'none');
				element.innerHTML = "More Options";
				element.className = "expand";
			}
		}
	}
});
Overlord.assign({
	minion: "blogs:battle:changetab:ignore",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
	}
});

Overlord.assign({
	minion: "blogs:battle:changetab:photo",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		YAHOO.util.Dom.setStyle('blog_battle_video', 'display', 'none');
		YAHOO.util.Dom.setStyle('blog_battle_photo', 'display', 'inline');
		YAHOO.util.Dom.setStyle('blog_tip_battle_video', 'display', 'none');
		YAHOO.util.Dom.setStyle('blog_tip_battle_photo', 'display', 'inline');
		
		document.getElementById('battletype').value = 'photo';
		
		document.getElementById('video_title').name = 'video_title';
		document.getElementById('video_caption_1').name = 'video_caption_1';
		document.getElementById('video_caption_2').name = 'video_caption_2';
		document.getElementById('video_link_1').name = 'video_link_1';
		document.getElementById('video_link_2').name = 'video_link_2';
		
		document.getElementById('photo_title').name = 'blog_post_title';
		document.getElementById('photo_caption_1').name = 'caption_1';
		document.getElementById('photo_caption_2').name = 'caption_2';
		document.getElementById('blog_post_photo_link_photo_1').name = 'link_1';
		document.getElementById('blog_post_photo_link_photo_2').name = 'link_2';
	}
});

Overlord.assign({
	minion: "blogs:battle:changetab:video",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}

		YAHOO.util.Dom.setStyle('blog_battle_video', 'display', 'inline');
		YAHOO.util.Dom.setStyle('blog_battle_photo', 'display', 'none');
		YAHOO.util.Dom.setStyle('blog_tip_battle_video', 'display', 'inline');
		YAHOO.util.Dom.setStyle('blog_tip_battle_photo', 'display', 'none');
		
		document.getElementById('battletype').value = 'video';
		
		document.getElementById('photo_title').name = 'photo_title';
		document.getElementById('photo_caption_1').name = 'photo_caption_1';
		document.getElementById('photo_caption_2').name = 'photo_caption_2';
		document.getElementById('blog_post_photo_link_photo_1').name = 'photo_link_1';
		document.getElementById('blog_post_photo_link_photo_2').name = 'photo_link_2';
		
		document.getElementById('video_title').name = 'blog_post_title';
		document.getElementById('video_caption_1').name = 'caption_1';
		document.getElementById('video_caption_2').name = 'caption_2';
		document.getElementById('video_link_1').name = 'link_1';
		document.getElementById('video_link_2').name = 'link_2';
	}
});

function blogs_battle_validate(type) {
	var questionField = null;
	if (document.getElementById('photo_title').name == 'blog_post_title') {
		questionField = document.getElementById('photo_title');
	} else if (document.getElementById('video_title').name == 'blog_post_title'){
		questionField = document.getElementById('video_title');
	}
	if (questionField.value == "") {
		alert('You need to enter a title before you can ' + type);
		return false;
	}
	return true;
}

function blogs_video_battle_validate(type) {
	if ((Nexopia.Utilities.trim(document.getElementById('video_link_1').value) == '') ||
	   (Nexopia.Utilities.trim(document.getElementById('video_link_2').value) == '') ) {
		alert('You need to enter a video embed code.');
		return false;
	}
	return true;
}

function blogs_photo_battle_validate(type) {
	if ( (document.getElementById('blog_post_photo_link_photo_1').value == '') || (document.getElementById('blog_post_photo_link_photo_2').value == '') ) {
		alert('You need to enter a photo link.');
		return false;
	}
	return true;
}

function blogs_battle_video_validate_preview() {
	return blogs_battle_validate('preview');
}

function blogs_battle_photo_validate_preview() {
	return blogs_battle_validate('preview');
}

Overlord.assign({
	minion: "blogs:battle_create:video:post",
	click: function(event) {
		var visibility = document.getElementById('blog_post_visibility').value;
		var valid = blogs_battle_validate('save') && blogs_video_battle_validate('save');
		if (!valid && event) {
			YAHOO.util.Event.preventDefault(event);
		}
		return valid;
	}
});

Overlord.assign({
	minion: "blogs:battle_create:photo:post",
	click: function(event) {
		var visibility = document.getElementById('blog_post_visibility').value;
		var valid = blogs_battle_validate('save') && blogs_photo_battle_validate('save');
		if (!valid && event) {
			YAHOO.util.Event.preventDefault(event);
		}
		return valid;
	}
});

Overlord.assign({
	minion: "blogs:battle:video:preview",
	load: function(event) {
		// We want to prevalidate before allowing preview.
		NexopiaPanel.linkBeforeOpenMap['blogs_battle_video_preview'] =
			blogs_battle_video_validate_preview;
	}
});

Overlord.assign({
	minion: "blogs:battle:photo:preview",
	load: function(event) {
		// We want to prevalidate before allowing preview.
		NexopiaPanel.linkBeforeOpenMap['blogs_battle_photo_preview'] =
			blogs_battle_photo_validate_preview;
	}
});

Overlord.assign({
	minion: "blogs:battle_vote:skip",
	click: function(event, element) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		var submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'blog_profile_battle');
		if (submit_page == null) {
			submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'public_feed_battle');
		}
		if (submit_page == null) {
			submit_page = 'blog_poll';
		} else {
			submit_page = submit_page.className;
		}
			
		var form = YAHOO.util.Dom.getAncestorByTagName(element, 'form');
		YAHOO.util.Connect.setForm(form);
		YAHOO.util.Connect.asyncRequest("POST",
			this.href, new ResponseHandler({}), 'ajax=true&submit_page=' + submit_page);
	}
});

Overlord.assign({
	minion: "blogs:battle_vote:vote",
	click: function(event, element) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		var submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'blog_profile_battle');
		if (submit_page == null) {
			submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'public_feed_battle');
		}
		if (submit_page == null) {
			submit_page = 'blog_poll';
		} else {
			submit_page = submit_page.className;
		}
		
		
		// Let's check that the user actually selected an option
		var vote_id = this.parentNode.parentNode.parentNode.id;
		var radios = document.getElementsByName('vote_' + vote_id);
		var anyChecked = false;
		for (var i = 0; i < radios.length; i++) {
			if (radios[i].checked) {
				anyChecked = true;
				break;
			}
		}
		if (!anyChecked) {
			alert("You need to select an option before you can vote.");
			return false;
		}
		// Good to go, let's vote!
		vote_id = vote_id.replace('_', '/');
		var form = YAHOO.util.Dom.getAncestorByTagName(element, 'form');
		var post_url = form.action + vote_id + "/battle_vote";
		var post_params = 'ajax=true&submit_page=' + submit_page;

		YAHOO.util.Connect.setForm(form);		
		YAHOO.util.Connect.asyncRequest("POST",	post_url,
			new ResponseHandler({}), post_params);
	}
});

Overlord.assign({
	minion: "blogs:battle:photo:caption_1",
	blur: function(event) {
		if (Nexopia.Utilities.trim(this.value) == '') this.value = 'Photo 1';
	}
});

Overlord.assign({
	minion: "blogs:battle:photo:caption_2",
	blur: function(event) {
		if (Nexopia.Utilities.trim(this.value) == '') this.value = 'Photo 2';
	}
});

Overlord.assign({
	minion: "blogs:battle:video:caption_1",
	blur: function(event) {
		if (Nexopia.Utilities.trim(this.value) == '') this.value = 'Video 1';
	}
});

Overlord.assign({
	minion: "blogs:battle:video:caption_2",
	blur: function(event) {
		if (Nexopia.Utilities.trim(this.value) == '') this.value = 'Video 2';
	}
});

Overlord.assign({
	minion: "blog:year_selector",
	change: function(element){
		var yearURL = this.options[this.selectedIndex].value;
		location.href = yearURL;
	}
});

Overlord.assign({
	minion: "blog:calendar_post_link",
	click: function(event, element){
		var link = YAHOO.util.Dom.getElementBy(function(el){return true;},'a', element);
		// Link returns null if user clicks on a box without a link
		if (link != null && link != "")
			location.href = link.href;
	}
})
if(YAHOO.blog == undefined){
	YAHOO.namespace ("blog");
}

YAHOO.blog.BlogComments =
{
	/*
			This function contains all the fun for displaying the reply enhanced text editor. In addition to
			moving the editor around the page we also have to resize it to ensure it fits and resize the smilies
			tab so it scrolls properly. We also need to adjust the form action so it posts to the proper place 
			(and replies to the correct comment).
	*/
	show_reply_editor: function(e)
	{
		YAHOO.util.Event.preventDefault(e);
		
		var target = YAHOO.util.Event.getTarget(e);
		
		var editor = document.getElementById("blog_comment_editor");
		
		var id_parts = target.id.split("_");
		var comment_id = id_parts[3];
		
		var comment = document.getElementById("blog_comment_"+comment_id);
		
		var actual_comment = YAHOO.util.Dom.getElementsByClassName("single_comment_wrapper", "div", comment, function(e){})[0];

		var comment_width = YAHOO.util.Dom.getRegion(comment).width;		
		var indent = YAHOO.util.Dom.getStyle(comment, "margin-left");
		comment_width = parseInt(comment_width, 10) - parseInt(indent, 10);

		//calculate the editor width. Use of magic number is needed. The picture is 100px wide plus 12px padding, thus the 112px.
		//var text_editor_width = parseInt(comment_width, 10) - 112;
		var text_editor_width = comment_width - 112;

		// default text_editor_size to width of parent comment - picture - padding - default indent margin (15px)
		if( isNaN(text_editor_width) ) {
			text_editor_width = comment.offsetWidth - 112 - 15; 
		}

		//Reconfigure the form action path
		var base_url = document.getElementById("blog_base_comment_url");
		var editor_form = document.getElementById("dynamic_blog_comment_form");
		base_url = base_url.value;		
		base_url = base_url +"/" + comment_id + "/submit";
		editor_form.action = base_url;
		
		var text_editor = YAHOO.util.Dom.getElementsByClassName("enhanced_text_box_wrapper", "div", editor_form, null)[0];
		
		//Reinitialize the smilies tab
		var smilies_container = YAHOO.util.Dom.getElementsByClassName("smilies", "div", "dynamic_blog_comment_form")[0];
		var editor_tab_body = smilies_container.parentNode;

		editor_tab_body.removeChild(smilies_container);
		
		var editor_obj = Nexopia.enhanced_text_editor_list['blog_comment_content'];
		editor_obj.text_box_width = text_editor_width;
		var pop = editor_obj.population();

		var new_smilies = editor_obj.build_smilies(pop[3].content[0], editor_tab_body);
		editor_tab_body.appendChild(new_smilies);
		
		//Move the editor back to the first tab and clear any input from the textarea
		editor_obj.activate_tab(0);
		editor_obj.text_box.value = "";
		
		editor.parentNode.removeChild(editor);
		
		/*
			We have to resize the editor and the text field within for IE. If we don't the edges
			of the editor extend outside of the bounds of the container. It only gets worse the
			further the comment is indented.
		*/
		
		YAHOO.util.Dom.setStyle(editor, "margin-left", indent);
		YAHOO.util.Dom.setStyle(editor, "width", comment_width + "px");
		YAHOO.util.Dom.setStyle(text_editor, "width", text_editor_width + "px");		

		YAHOO.util.Dom.insertAfter(editor, actual_comment);
		YAHOO.util.Dom.setStyle(editor, "display", "block");
		YAHOO.util.Dom.setStyle(editor, "overflow", "hidden");
		
		editor_obj.text_box.focus();
		
	},
	
	post_comment: function(e)
	{
		if (e) {
			YAHOO.util.Event.preventDefault(e);
		}
		
		var editor_form = document.getElementById("dynamic_blog_comment_form");
		
		YAHOO.util.Connect.setForm(editor_form);
		YAHOO.util.Connect.asyncRequest(editor_form.method, editor_form.action + "/dynamic", new ResponseHandler({
			success: function(o) {
				YAHOO.blog.BlogComments.update_comments_view(o);
			},
			failure: function(o) {
			},
			scope: this
		}), "");
	},
	
	
	/*
		This function handles explicitly setting the width for blog comments. This prevents large images
		from spilling out and breaking the layout. This needs a javascript solution because the width of
		blog comments varies depending on their depth in the tree. As such a simple CSS fix won't do.
		
		We need to keep the CSS workaround in place for non javascript users. It's not pretty, but it
		makes the blog comments still usable.
	*/
	handle_comment_overflow: function(root_element)
	{
		var i;
		var temp;
		
		for(i=0; i < root_element.childNodes.length; i++)
		{
			temp = root_element.childNodes[i];
			YAHOO.blog.BlogComments.set_element_width(temp, 0);
		}
	},

	set_element_width: function(element, depth)
	{
		var i;
		var comment_regex = /^blog_comment_\d*$/;
		var temp;
		var temp_width;
		var max_width = YAHOO.blog.BlogComments.blog_comment_width();
		var comment_indent = 15;
		
		if(element.id && element.id.match(comment_regex))
		{
			/*
				We use the max width as the actual width of one of the blog_container elements. It's the nearest
				parent element to the blog comment with a specified width. Once we grab that we can figure out
				the width of the blog comment. Knowing this allows us to use static values for the widths of the
				comment content and comment body elements. We know they are 122px and 128px smaller, respectively.
				
				We could try to figure out dynamically the amount those elements are smaller, however this would be 
				difficult as we'd have to try to get all the margins, paddings, and borders accounted for in all 
				of the relevant parent elements prior to calculating the width.
				
				With that being an expensive task, this function will have to be manually updated if we change the
				display of blog comments.
			*/
			temp_width = max_width-depth*comment_indent;
			YAHOO.util.Dom.setStyle(element, "width", temp_width +"px");
			YAHOO.util.Dom.setStyle(element, "overflow", "hidden");
			
			var content = YAHOO.util.Dom.getElementsByClassName("comment_content", "div", element, null)[0];
			var content_width = max_width - 122 - depth*comment_indent;
			YAHOO.util.Dom.setStyle(content, "width", content_width + "px");
			
			var comment_body = YAHOO.util.Dom.getElementsByClassName("comment_body", "div", content, null)[0];
			var body_width = max_width - 128 - depth*comment_indent;
			YAHOO.util.Dom.setStyle(comment_body, "width", body_width + "px");
			
			for(i=0; i < element.childNodes.length; i++)
			{
				temp = element.childNodes[i];
				YAHOO.blog.BlogComments.set_element_width(temp, depth+1);
			}
		}
	},
		
	blog_comment_width: function()
	{
		if(!YAHOO.blog.BlogComments.blog_width)
		{
			var temp_list = YAHOO.util.Dom.getElementsByClassName("blog_container", "div", "blog", null);
		
			if(temp_list.length > 0)
			{
				YAHOO.blog.BlogComments.blog_width = parseInt(YAHOO.util.Dom.getStyle(temp_list[0], "width"), 10);
			
				if(!YAHOO.blog.BlogComments.blog_width)
				{
					YAHOO.blog.BlogComments.blog_width = 738;
				}
			}
			else
			{
				YAHOO.blog.BlogComments.blog_width = 738;
			}
		}
		
		return YAHOO.blog.BlogComments.blog_width;
	}
};

Overlord.assign({
	minion: "blog:comment_reply",
	load: function(element) {
		YAHOO.util.Event.addListener(element, "click", YAHOO.blog.BlogComments.show_reply_editor);
	}
});

Overlord.assign({
	minion: "blog_comments:select_all",
	click: function(event, element) {
		YAHOO.util.Event.preventDefault(event);
		var elements = YAHOO.util.Dom.getElementsByClassName('blog_comment_delete_input', 'input', null, function(checkbox) {checkbox.checked=true;});
		if (elements.length != 0 && YAHOO.blog.BlogComments.deleteBtn)
		{
			YAHOO.blog.BlogComments.deleteBtn.set("disabled", false);
		}
	}
});

Overlord.assign({
	minion: "blog_comments:select_none",
	click: function(event, element){
		YAHOO.util.Event.preventDefault(event);
		var elements = YAHOO.util.Dom.getElementsByClassName('blog_comment_delete_input', 'input', null, function(checkbox) {checkbox.checked=false;});
		if (elements.length != 0 && YAHOO.blog.BlogComments.deleteBtn)
		{
			YAHOO.blog.BlogComments.deleteBtn.set("disabled", true);
		}
	}
});

Overlord.assign({
	minion: "blog_comments:comment_functions",
	load: function(element){
		YAHOO.blog.BlogComments.deleteBtn = new YAHOO.widget.Button("delete_btn", {disabled:true});
	}
});

Overlord.assign({
	minion: "blog_comments:post_select",
	click: function(element){
		var disable = true;
		var postSelectElements = YAHOO.util.Dom.getElementsByClassName("blog_comment_delete_input", "input", "blog_comments_delete_form");
		for(var i = 0; i < postSelectElements.length; i++)
		{
			if (postSelectElements[i].checked)
			{
				disable = false;
				break;
			}
		}
		
		if (YAHOO.blog.BlogComments.deleteBtn)
		{
			YAHOO.blog.BlogComments.deleteBtn.set("disabled", disable);
		}
	}
});

Overlord.assign({
	minion: "blog_comments:dynamic_comment_reply_editor",
	order: 10,
	load: function(element)
	{
		YAHOO.util.Dom.setStyle(element, "display", "none");
	}
});

/*
Overlord.assign({
	minion: "blog_comments:comment_overflow",
	load: function(element)
	{
		YAHOO.blog.BlogComments.handle_comment_overflow(element);
	}
});
*/

function blogs_validate_preview() {
	return blogs_title_validate();
}

function blogs_title_validate() {
	var title = document.getElementsByName('blog_post_title')[0];
	if (title) {
		title.value = Nexopia.Utilities.trim(title.value);
		if (title.value == '') {
			alert('No title specified');
			return false;
		}
	}
	return true;
}

Overlord.assign({
	minion: "blogs:preview",
	load: function(event) {
		NexopiaPanel.linkBeforeOpenMap['blogs_preview'] =
			blogs_validate_preview;
	}
});

Overlord.assign({
	minion: "blogs:post",
	click: function(event) {
		var valid = blogs_title_validate();
		if (!valid && event) {
			YAHOO.util.Event.preventDefault(event);
		}
		return valid;
	}
});

Overlord.assign({
	minion: "blogs:post_form",
	submit: function(event) {
		
		var btn = document.getElementById('post_button-button');
		var btnParent = YAHOO.util.Dom.getAncestorByClassName(btn, 'custom_button');

		btn.disabled = true;
		YAHOO.util.Dom.addClass(btnParent, 'yui-button-disabled');
		YAHOO.util.Dom.addClass(btnParent, 'yui-push-button-disabled');
		
		return true;
	}
});

BlogPhotoUploader = function(element) {
	var container = document.getElementById('add_photo_container');
	var display = this.hasSuitableFlashVersion &&
		(!container || (container.className != 'hidden'));
	if (display) {
		this.photo_id = element.parentNode.parentNode.id;
		YAHOO.widget.Uploader.SWFURL = Site.staticFilesURL + "/gallery/flash/uploader.swf";
		this.flashUploader = new YAHOO.widget.Uploader("uploader_overlay"+this.photo_id);
		var overlay = document.getElementById('uploader_overlay'+this.photo_id);
		var button = overlay.nextSibling;
		var uiLayer = YAHOO.util.Dom.getRegion(button); 

		YAHOO.util.Dom.setStyle(overlay, 'width', (uiLayer.right-uiLayer.left+2) + "px"); 
		YAHOO.util.Dom.setStyle(overlay, 'height', (uiLayer.bottom-uiLayer.top+2) + "px"); 

		this.flashUploader.addListener('contentReady', this.configUploader, this, true);
		this.flashUploader.addListener('fileSelect', this.startUpload, this, true);
		this.flashUploader.addListener('uploadCompleteData', this.uploadComplete, this, true);
	}

};

BlogPhotoUploader.prototype = {
	flashUploader: null,
	configUploader: function() {
		this.flashUploader.setFileFilters(["*.jpeg;*.jpg;*.png;*.gif;*.bmp"], "Picture Files");
	},
	//minimum version is 9.0.45
	hasSuitableFlashVersion: function() {
		if (YAHOO.util.FlashDetect.major > 9) {
			return true;
		} else if (YAHOO.util.FlashDetect.major == 9) {
			if (YAHOO.util.FlashDetect.minor > 0 || YAHOO.util.FlashDetect.revision >= 45) {
				return true;
			}
		}
		return false;
	},
	startUpload: function(event) {
		this.showSpinner();
		this.flashUploader.uploadAll(document.getElementById("swf_upload_path"+this.photo_id).value, 'POST', {
			type: "Blogs",
			description: "",
			photo_id: this.photo_id,
			blog_id: document.getElementById('blog_id').value,
			session: YAHOO.util.Dom.get('session'+this.photo_id).value
		});
	},
	uploadComplete: function(event) {
		var success = false;
		r = new ResponseHandler({});

		var serverData = event.data;
		if (serverData.indexOf("Success") == 0) {
			serverData = serverData.slice(8,serverData.length);
			success = true;
		}

		r.handleResponse({responseText: serverData});

		this.panel.close();
	},

	showSpinner: function() {
		this.panel = new DivPanel({div_id:'blog_uploading_spinner' + this.photo_id});
		this.panel.open();
	}
};

Overlord.assign({
	minion: "blogs:photo_uploader",
	load: function(element) {
		new BlogPhotoUploader(element);
	}
});
function blogs_poll_validate(type) {
	var questionField = document.getElementById("blog_post_title");
	questionField.value = Nexopia.Utilities.trim(questionField.value);
	if (questionField.value == "") {
		alert('You need to enter a question before you can ' + type);
		return false;
	}
	
	var found = 0;
	for (i = 1; i <= 10; ++i) {
		var elem = document.getElementById("ans_" + i);
		elem.value = Nexopia.Utilities.trim(elem.value);
		if (elem.value != "") {
			found++;
		}
	}
	if (found < 2) {
		alert('You need to enter at least two answers before you can ' + type);
		return false;
	}

	return true;
}

Overlord.assign({
	minion: "blogs:poll_create:post",
	click: function(event) {
		var valid = blogs_poll_validate('save');
		if (!valid && event) {
			YAHOO.util.Event.preventDefault(event);
		}
		return valid;
	}
});

function blogs_poll_validate_preview() {
	return blogs_poll_validate('preview');
}

Overlord.assign({
	minion: "blogs:poll:preview",
	load: function(event) {
		// We want to prevalidate before allowing preview.
		NexopiaPanel.linkBeforeOpenMap['blogs_poll_preview'] =
		 	blogs_poll_validate_preview;
	}
});

Overlord.assign({
	minion: "blogs:poll_create:add_row",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		// Find first hidden answer
		for (i = 1; i <= 10; ++i) {
			var elem = document.getElementById('ans_' + i);
			if (elem.className == 'hide') {
				elem.className = 'answer';
				elem.focus();
				foundElem = true;
				break;
			}
		}
		// Showing all ten answers?  If so, hide add link
		elem = document.getElementById('ans_10');
		if (elem.className == 'answer') {
			var elem = document.getElementById("add_row");
			YAHOO.util.Dom.setStyle(elem, 'display', 'none');
		}
	}
});

function blog_poll_create_set_photo_options(value) {
	document.getElementById('size_original').disabled = value;
	document.getElementById('size_100').disabled = value;
	document.getElementById('size_75').disabled = value;
	document.getElementById('size_50').disabled = value;
	document.getElementById('size_25').disabled = value;

	document.getElementById('align_center').disabled = value;
	document.getElementById('align_left').disabled = value;
	document.getElementById('align_right').disabled = value;
}

Overlord.assign({
	minion: "blogs:poll_create:add_photo",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		document.getElementById('add_photo_button').className =
		 	'hidden';
		document.getElementById('remove_photo_button').className =
			'shown';
		document.getElementById('add_photo_container').className =
			'shown';
		Overlord.summonMinions(document.getElementById('add_photo_container'));
		blog_poll_create_set_photo_options(false);
	}
});

Overlord.assign({
	minion: "blogs:poll_create:remove_photo",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		document.getElementById('add_photo_button').className =
		 	'shown';
		document.getElementById('remove_photo_button').className =
			'hidden';
		document.getElementById('add_photo_container').className =
			'hidden';
		blog_poll_create_set_photo_options(true);
			
		// Reset the photo field
		document.getElementById('blog_post_photo_link').value = '';
	}
});

Overlord.assign({
	minion: "blogs:poll:photo_options",
	load: function(event) {
		blog_poll_create_set_photo_options(true);
	}
});

Overlord.assign({
	minion: "blogs:poll_vote:skip",
	click: function(event, element) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		var submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'blog_profile_poll');
		if (submit_page == null) {
			submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'public_feed_poll');
		}
		if (submit_page == null) {
			submit_page = 'blog_poll';
		} else {
			submit_page = submit_page.className;
		}
		
		
		var form = YAHOO.util.Dom.getAncestorByTagName(element, 'form');
		YAHOO.util.Connect.setForm(form);
		YAHOO.util.Connect.asyncRequest("POST",
			element.href, new ResponseHandler({}), 'ajax=true&submit_page=' + submit_page);
	}
	
});

Overlord.assign({
	minion: "blogs:poll_vote:skip_login",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}

		top.location='/account/login?referer=' +
			escape(document.location.href);
	}
});

Overlord.assign({
	minion: "blogs:poll_vote:vote",
	click: function(event,element) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		var submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'blog_profile_poll');
		if (submit_page == null) {
			submit_page = YAHOO.util.Dom.getAncestorByClassName(element, 'public_feed_poll');
		}
		if (submit_page == null) {
			submit_page = 'blog_poll';
		} else {
			submit_page = submit_page.className;
		}

		// Let's check that the user actually selected an option
		var vote_id = this.parentNode.parentNode.parentNode.id;
		var radios = document.getElementsByName('vote_' + vote_id);
		var anyChecked = false;
		for (var i = 0; i < radios.length; i++) {
			if (radios[i].checked) {
				anyChecked = true;
				break;
			}
		}
		if (!anyChecked) {
			alert("You need to select an option before you can vote.");
			return false;
		}

		// Good to go, let's vote!
		var form = YAHOO.util.Dom.getAncestorByTagName(element, 'form');
		YAHOO.util.Connect.setForm(form);
		vote_id = vote_id.replace('_', '/');
		YAHOO.util.Connect.asyncRequest("POST",
			form.action + vote_id + "/poll_vote",
			new ResponseHandler({}), 'ajax=true&submit_page=' + submit_page);
	}
});

Overlord.assign({
	minion: "blogs:poll_vote:vote_login",
	click: function(event) {
		if (event) {
			YAHOO.util.Event.preventDefault(event);
		}
		
		top.location='/account/login?referer=' +
			escape(document.location.href);
	}
});


if(YAHOO.profile == undefined){
	YAHOO.namespace ("profile");
}

YAHOO.profile.BlogBlock =
{
	init: function()
	{
		this.resize_embeds();
	},
	
	resize_embeds: function()
	{
		var blog_block = document.getElementById("blog_profile_block");
		var obj_list = YAHOO.util.Dom.getElementsBy(function(el){return true;}, "object", blog_block, null);
		
		var i;
		for(i=0; i < obj_list.length; i++)
		{
			var parent_width = parseInt(YAHOO.util.Dom.getStyle(obj_list[i].parentNode, "width"));
			var obj_width = parseInt(YAHOO.util.Dom.getStyle(obj_list[i], "width"));
			var obj_height = parseInt(YAHOO.util.Dom.getStyle(obj_list[i], "height"));
			
			if(obj_width > parent_width)
			{
				var ratio = obj_width / parseFloat(obj_height);
				var new_width = parent_width;
				var new_height = new_width / ratio;
				
				YAHOO.util.Dom.setStyle(obj_list[i], "width", new_width + "px");
				YAHOO.util.Dom.setStyle(obj_list[i], "height", new_height + "px");
				
				var embed_list = YAHOO.util.Dom.getElementsBy(function(el){return true;}, "embed", obj_list[i], null);
				
				var j;
				for(j=0; j < embed_list.length; j++)
				{
					YAHOO.util.Dom.setStyle(embed_list[j], "width", new_width + "px");
					YAHOO.util.Dom.setStyle(embed_list[j], "height", new_height + "px");
				}
			}
		}
	}
};

Overlord.assign({
	minion: "blog_profile_block",
	load: function(element) {
		YAHOO.profile.BlogBlock.init();
	},
	order: 2
});
if(YAHOO.blog == undefined){
	YAHOO.namespace ("blog");
}

YAHOO.blog.BlogView =
{
	toggle: function(element)
	{
		// Find the elements under it that we either want to show or hide
		var blogPostDetails = YAHOO.util.Dom.getElementsByClassName('blog_post', 'div', element)[0];
		var blogPostUserFunctions = YAHOO.util.Dom.getElementsByClassName('user_functions', 'div', element)[0];
		var blogPostUserFunctionsLeft = YAHOO.util.Dom.getElementsByClassName('user_functions_left', 'div', element)[0];
		var blogPostCollapsedUserFunctions = YAHOO.util.Dom.getElementsByClassName('collapsed_user_functions', 'div', element)[0];
		var blogExtraContent = YAHOO.util.Dom.getElementsByClassName('extra_content', 'div', element)[0];

		// Find the toggle symbol span that we want to change
		var blogPostToggle = YAHOO.util.Dom.getElementsByClassName('toggle', 'span', element)[0];
		
		// Figure out whether we're showing things or hiding them
		var currentSymbol = blogPostToggle.innerHTML;
		var nextDisplay = '';
		var collapseDisplay = '';
		var handler = '';
		if (currentSymbol== '+')
		{
			handler = 'show_details';
			nextDisplay = 'block';
			collapseDisplay = 'none';
			nextSymbol = "-";
		}
		else if (currentSymbol == '-')
		{
			handler = 'hide_details';
			nextDisplay = 'none';
			collapseDisplay = 'block';
			nextSymbol = "+";
		}
		
		// Do the actual show/hide
		YAHOO.util.Dom.setStyle(blogPostDetails, 'display', nextDisplay);
		YAHOO.util.Dom.setStyle(blogPostUserFunctions, 'display', nextDisplay);
		if(blogPostUserFunctionsLeft)
		{
			YAHOO.util.Dom.setStyle(blogPostUserFunctionsLeft, 'display', nextDisplay);
		}
		YAHOO.util.Dom.setStyle(blogPostCollapsedUserFunctions, 'display', collapseDisplay);
		YAHOO.util.Dom.setStyle(blogExtraContent, 'display', nextDisplay);
		blogPostToggle.innerHTML = nextSymbol;
		
		var id = YAHOO.blog.BlogView.getDatabaseID(element);

		// TODO: Show some sort of minimalistic 'user_functions' (like comments) in the header when the post is hidden,
		// as in the actual blog spec.		
		
		return '/my/blog/navigation/' + id.blogUserID + '/' + id.postID + '/' + handler;	
	},
	
	
	getDatabaseID: function(element)
	{
		var idString = element.id.replace(/blog_post_/,'');
		var idParts = idString.split(":");
		
		return { blogUserID: idParts[0], postID: idParts[1] };
	},
	
	
	inCollapseList: function(element)
	{
		var id = YAHOO.blog.BlogView.getDatabaseID(element);
		for(var i = 0; i < Nexopia.JSONData.navigation_list.length; i++)
		{
			var keySet = Nexopia.JSONData.navigation_list[i];
			if(id.blogUserID == keySet[0] && id.postID == keySet[1])
			{
				return true;
			}
		}
		return false;
	},
	
	
	initializePostCollapsing: function(element)
	{
		var list = YAHOO.util.Dom.getElementsByClassName('blog_post_container', 'div');
		for(var i = 0; i < list.length; i++)
		{
			if (YAHOO.blog.BlogView.inCollapseList(list[i]))
			{
				// Collapse the blog post
				YAHOO.blog.BlogView.toggle(list[i]);
			}
		}
	}
};

Overlord.assign({
	minion: "blog:select_all",
	click: function(event, element) {
		YAHOO.util.Event.preventDefault(event);
		var elements = YAHOO.util.Dom.getElementsByClassName('blog_post_select', 'input', null, function(checkbox) {checkbox.checked=true;});
		if(elements.length != 0)
		{
			if (YAHOO.blog.BlogView.deleteBtn)
			{
				YAHOO.blog.BlogView.deleteBtn.set("disabled", false);
			}
			if (YAHOO.blog.BlogView.changePermissionsBtn)
			{
				YAHOO.blog.BlogView.changePermissionsBtn.set("disabled", false);
			}
		}
	}
});

Overlord.assign({
	minion: "blog:select_none",
	click: function(event, element){
		YAHOO.util.Event.preventDefault(event);
		var elements = YAHOO.util.Dom.getElementsByClassName('blog_post_select', 'input', null, function(checkbox) {checkbox.checked=false;});
		if(elements.length != 0)
		{
			if (YAHOO.blog.BlogView.deleteBtn)
			{
				YAHOO.blog.BlogView.deleteBtn.set("disabled", true);
			}
			if (YAHOO.blog.BlogView.changePermissionsBtn)
			{
				YAHOO.blog.BlogView.changePermissionsBtn.set("disabled", true);
			}
		}		
	}
});

Overlord.assign({
	minion: "blog:show_details_toggle",
	click: function(event, element){
		YAHOO.util.Event.preventDefault(event);
		
		var blogPostContainer = YAHOO.util.Dom.getAncestorByClassName(element, 'blog_post_container');
		var postURL = YAHOO.blog.BlogView.toggle(blogPostContainer);
		var formKey = document.getElementById('viewer_navigation_form_key').value;
		
		// Make an Ajax post to record the setting. Only record for logged in users, of course
		YAHOO.util.Connect.asyncRequest('POST', postURL, {
			success: function(o) {
			},
			failure: function(o) {
			},
			scope: this
		}, "ajax=true&form_key[]=" + formKey);		
	}
});

Overlord.assign({
	minion: "blog:footer",
	load: function(element) {
		YAHOO.blog.BlogView.deleteBtn = new YAHOO.widget.Button("delete_btn", {disabled:true});
		YAHOO.blog.BlogView.changePermissionsBtn = new YAHOO.widget.Button("change_permissions_btn", {disabled:true});
	}
});


Overlord.assign({
	minion: "blog:delete_one",
	click: function(event, element) {
		YAHOO.util.Event.preventDefault(event);
		
		// First uncheck all check boxes
		var elements = YAHOO.util.Dom.getElementsByClassName('blog_post_select', 'input', null, function(checkbox) {checkbox.checked=false;});
		if(elements.length != 0)
		{
			if (YAHOO.blog.BlogView.deleteBtn)
			{
				YAHOO.blog.BlogView.deleteBtn.set("disabled", false);
			}
			if (YAHOO.blog.BlogView.changePermissionsBtn)
			{
				YAHOO.blog.BlogView.changePermissionsBtn.set("disabled", false);
			}
		}
		
		// Find and check the proper checkbox
		var blog_post_id = Nexopia.json(element);
		document.getElementById('blog_post_select[' + blog_post_id + ']').checked = true;
		
		// Submit form - I looked extensively for a YUI method to accomplish this, but it wouldn't work in
		// firefox, only IE. Ended up going with this semi-hackjob method that has been tested in Safari 3,
		// FF3 and IE7.
		if (document.createEventObject) {
			// dispatch for IE
			var evt = document.createEventObject();
			document.getElementById('delete_btn-button').fireEvent('onclick',evt);
		} else {
			// dispatch for firefox + others
			var evt = document.createEvent("HTMLEvents");
			evt.initEvent('click', true, true );
			document.getElementById('delete_btn-button').dispatchEvent(evt);
		}
	}
});

Overlord.assign({
	minion: "blog:post_select",
	click: function(event, element){
		var disable = true;
		var postSelectElements = YAHOO.util.Dom.getElementsByClassName("blog_post_select", "input", "blog");
		for(var i = 0; i < postSelectElements.length; i++)
		{
			if (postSelectElements[i].checked)
			{
				disable = false;
				break;
			}
		}
		
		if (YAHOO.blog.BlogView.deleteBtn)
		{
			YAHOO.blog.BlogView.deleteBtn.set("disabled", disable);
		}
		if (YAHOO.blog.BlogView.changePermissionsBtn)
		{
			YAHOO.blog.BlogView.changePermissionsBtn.set("disabled", disable);
		}
	}
});

Overlord.assign({
	minion: "blog:filter",
	change: function(event, element) {
		var form = YAHOO.util.Dom.getAncestorByTagName(element, "form");
		form.submit();		
	}
});
if(YAHOO.blog == undefined){
	YAHOO.namespace ("blog");
}

/*
	This is needed for the blog views count. It get inclued on a few blog pages when the
	 blog user account has been view rate limited. It's included from view_blog, view_selected_entries and view_blog_post.
*/
YAHOO.blog.BlogViewCount =
{
	init: function(request_form)
	{
		if(request_form.tagName.toLowerCase() == "form" && request_form.id == "request_blog_view")
		{
			YAHOO.util.Connect.setForm(request_form);
			YAHOO.util.Connect.asyncRequest(request_form.method, request_form.action, {
				success: function(o) {
				},
				failure: function(o) {
				},
				scope: this
			}, "");
		}
	}
};

Overlord.assign({
	minion: "request_blog_view",
	load: function(element) {
		YAHOO.profile.BlogViewCount.init(element);
	}
});
Overlord.assign({
	minion: "blogs:photo_link",
	blur: function(event) {
		var value = this.value;
		this.value = value.replace(/http:\/\/(.*):\/\//, '$1:\/\/');
	}
});

PublicBlogs = 
{
	featurePostNext: function(event,element)
	{
		YAHOO.util.Event.preventDefault(event);
		
		var currentKey = Nexopia.json(element);		
		var nextKey = PublicBlogs.findNextKey(currentKey, Nexopia.JSONData.navigation_list);
		
		YAHOO.util.Connect.asyncRequest('GET', element.href + '/' + nextKey[0] + '/' + nextKey[1], new ResponseHandler({
			success: function(o) 
			{
				if(o.responseText.trim() == '')
				{
					nextKey = PublicBlogs.findNextKey(nextKey, Nexopia.JSONData.navigation_list);
					YAHOO.util.Connect.asyncRequest('GET', element.href + '/' + nextKey[0] + '/' + nextKey[1], new ResponseHandler({}), "ajax=true");
				}
			}
		}), "ajax=true");
		PublicBlogs.updateState(nextKey, Nexopia.JSONData.navigation_list);
	},
	featurePostPrevious: function(event,element)
	{
		YAHOO.util.Event.preventDefault(event);
		
		var currentKey = Nexopia.json(element);
		var previousKey = PublicBlogs.findPreviousKey(currentKey, Nexopia.JSONData.navigation_list);
		
		YAHOO.util.Connect.asyncRequest('GET', element.href + '/' + previousKey[0] + '/' + previousKey[1], new ResponseHandler({
			success: function(o) 
			{
				if(o.responseText.trim() == '')
				{
					previousKey = PublicBlogs.findPreviousKey(previousKey, Nexopia.JSONData.navigation_list);
					YAHOO.util.Connect.asyncRequest('GET', element.href + '/' + previousKey[0] + '/' + previousKey[1], new ResponseHandler({}), "ajax=true");

				}
			}			
		}), "ajax=true");
		PublicBlogs.updateState(previousKey, Nexopia.JSONData.navigation_list);
	},
	indexOf: function(key, navigationList)
	{
		for(var i = 0; i < navigationList.length; i++)
		{
			var listItem = navigationList[i];
			if(key[0] == listItem[0] && key[1] == listItem[1])
			{
				return i;
			}
		}
		
		return null;
	},
	findNextKey: function(key, navigationList)
	{
		var keyIndex = PublicBlogs.indexOf(key, navigationList);
		if(keyIndex != null && keyIndex + 1 < navigationList.length)
		{
			return navigationList[keyIndex + 1];
		}
		else
		{
			return null;
		}
	},
	
	findPreviousKey: function(key, navigationList)
	{
		var keyIndex = PublicBlogs.indexOf(key, navigationList);
		if(keyIndex != null && keyIndex - 1 >= 0)
		{
			return navigationList[keyIndex - 1];
		}
		else
		{
			return null;
		}		
	},
	
	updateState: function(key, navigationList)
	{
		var previousKey = PublicBlogs.findPreviousKey(key, navigationList);
		if(PublicBlogs.previousLink)
		{
			if(previousKey)
			{
				YAHOO.util.Dom.setStyle(PublicBlogs.previousLink, "display", "block");
			}
			else
			{
				YAHOO.util.Dom.setStyle(PublicBlogs.previousLink, "display", "none");
			}
		}
		
		var nextKey = PublicBlogs.findNextKey(key, navigationList);
		if(PublicBlogs.nextLink)
		{ 
			if(nextKey)
			{
				YAHOO.util.Dom.setStyle(PublicBlogs.nextLink, "display", "block");
			}
			else
			{
				YAHOO.util.Dom.setStyle(PublicBlogs.nextLink, "display", "none");
			}
		}
	},
	
	registerNext: function(element)
	{
		// Remove duplicate entries if there are any
		Nexopia.JSONData.navigation_list = Nexopia.JSONData.navigation_list.unique(function(a,b) { return a[0] == b[0] && a[1] == b[1]; });
		PublicBlogs.nextLink = element;
		PublicBlogs.updateState(Nexopia.json(element), Nexopia.JSONData.navigation_list);
	},
	
	registerPrevious: function(element)
	{
		// Remove duplicate entries if there are any
		Nexopia.JSONData.navigation_list = Nexopia.JSONData.navigation_list.unique(function(a,b) { return a[0] == b[0] && a[1] == b[1]; });
		
		PublicBlogs.previousLink = element;
		PublicBlogs.updateState(Nexopia.json(element), Nexopia.JSONData.navigation_list);
	},
	
	registerCommentFormDiv: function(element)
	{
		PublicBlogs.commentFormDiv = element;
	},
	
	toggleCommentForm: function(event, element)
	{
		YAHOO.util.Event.preventDefault(event);
		
		var display = YAHOO.util.Dom.getStyle(PublicBlogs.commentFormDiv, 'display');
		if(display == 'block')
		{
			YAHOO.util.Dom.setStyle(PublicBlogs.commentFormDiv, 'display', 'none');			
		}
		else
		{
			YAHOO.util.Dom.setStyle(PublicBlogs.commentFormDiv, 'display', 'block');			
			YAHOO.util.Dom.setStyle(PublicBlogs.commentSpinner, 'display', 'none');
			YAHOO.util.Dom.setStyle(PublicBlogs.commentFormSubmitButton, 'display', 'block');
			YAHOO.util.Dom.setStyle(PublicBlogs.commentFormPostingSpan, 'display', 'none');
			YAHOO.util.Dom.setStyle(PublicBlogs.successMessageDiv, 'display', 'none');
			PublicBlogs.commentInputTextArea.value = '';		
			if (!PublicBlogs.enhancedTextInput) {
				PublicBlogs.enhancedTextInput = new EnhancedTextInput(PublicBlogs.commentInputTextArea);
			}
			PublicBlogs.commentInputTextArea.focus();
		}
	},
	
	registerCommentSpinner: function(element)
	{
		PublicBlogs.commentSpinner = element;
	},
	
	registerSuccessMessageDiv: function(element)
	{
		PublicBlogs.successMessageDiv = element;
	},

	registerCommentCount: function(element)
	{
		PublicBlogs.commentCount = element;
	},
	registerCommentFormPostingSpan: function(element)
	{
		PublicBlogs.commentFormPostingSpan = element;
	},
	registerCommentFormSubmitButton: function(element)
	{
		PublicBlogs.commentFormSubmitButton = element;
	},
	registerCommentInputTextArea: function(element)
	{
		PublicBlogs.commentInputTextArea = element;
	},
	submitComment: function(event, element)
	{
		YAHOO.util.Event.preventDefault(event);
		YAHOO.util.Dom.setStyle(PublicBlogs.commentSpinner, 'display', 'block');
		
		var form = YAHOO.util.Dom.getAncestorByTagName(element, "form");
		
		YAHOO.util.Dom.setStyle(PublicBlogs.commentFormSubmitButton, 'display', 'none');
		YAHOO.util.Dom.setStyle(PublicBlogs.commentFormPostingSpan, 'display', 'inline');
				
		YAHOO.util.Connect.setForm(form);
		YAHOO.util.Connect.asyncRequest('POST', form.action, 
		{
			success : function(o) 
			{
				YAHOO.util.Dom.setStyle(PublicBlogs.commentFormDiv, 'display', 'none');
				YAHOO.util.Dom.setStyle(PublicBlogs.successMessageDiv, 'display', 'block');
				PublicBlogs.commentCount.innerHTML = parseInt(PublicBlogs.commentCount.innerHTML, 10) + 1;
			},
			failure : function(o) 
			{
			}
		}, "ajax=true");
	}
};

Overlord.assign({
	minion: "public_blogs:feature_post:next",
    click: PublicBlogs.featurePostNext,
	load: PublicBlogs.registerNext
});

Overlord.assign({
	minion: "public_blogs:feature_post:previous",
    click: PublicBlogs.featurePostPrevious,
	load: PublicBlogs.registerPrevious
});
Overlord.assign({
	minion: "public_blogs:comment_form",
	load: PublicBlogs.registerCommentFormDiv
});
Overlord.assign({
	minion: "public_blogs:comment_form:toggle",
	click: PublicBlogs.toggleCommentForm
});
Overlord.assign({
	minion: "public_blogs:comment_spinner",
	load: PublicBlogs.registerCommentSpinner
});
Overlord.assign({
	minion: "public_blogs:comment_form:submit",
	click: PublicBlogs.submitComment,
	load: PublicBlogs.registerCommentFormSubmitButton
});
Overlord.assign({
	minion: "public_blogs:comment_form:success",
	load: PublicBlogs.registerSuccessMessageDiv
});
Overlord.assign({
	minion: "public_blogs:comment_count",
	load: PublicBlogs.registerCommentCount
});
Overlord.assign({
	minion: "public_blogs:comment_form:posting",
	load: PublicBlogs.registerCommentFormPostingSpan
});
Overlord.assign({
	minion: "public_blogs:comment_input",
	load: PublicBlogs.registerCommentInputTextArea
});
Overlord.assign({
	minion: "blogs:video_embed",
	blur: function(event) {
		var value = escape(this.value);
		var form = document.getElementById("new_blog");
		var dest = '/videos/sanitize?video_embed=' + value;
		YAHOO.util.Connect.setForm(form);
		YAHOO.util.Connect.asyncRequest("POST", dest,
			new ResponseHandler({
				success: function(o) {
					this.value = o.responseText
				},
				scope: this
			}));
	}
});



