// --------------------------------------------------------
// 
// --------------------------------------------------------
var g_dialogTimeout = null;

// --------------------------------------------------------
// 
// --------------------------------------------------------
$(document).ready(
	function ()
	{
		initSignupForm();
		
		initDialog();
		
		initSponsorLogo();
		
		// initBestOfMenu();
		
		initItemMenus();
		
		initRecentIssuesMenu();
		
		initRouletteMenu();

		// initEditionMenu();
		
		initLinkDetails();
		
		initFlir();
		
		initSharingMenu();
		
		initFooterLinks();
		
		preloadImages();

		if ($("ol#issue-categories").length)
		{
			$("ol#issue-categories").onImagesLoad({
				selectorCallback: initIssueLayout
			});
		}
		else
		{
			// initExpertDetails();
		};
		
		$("#share-lotw li:last").css("border-bottom", "1px solid #9c9c9c");
		
		// tmp

		/*
		showDialog({
			view: "sent",
			state: "narrow send-email-link",
			header: "Send Email Linking to Us",
			hollaback: function ()
			{
				$("#send-email-link div.actions a").click(
					function ()
					{
						var formEl = $("#send-email-link");
					
		 				var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		 				
		 				$("div.error", formEl).hide();
						
						if ($(this).is(".button-send"))
						{
							if (
								$("textarea.recipients", formEl).val() == "" ||
								$("input.sender", formEl).val() == "" ||
								$("input.sender", formEl).val() == $("input.sender", formEl).attr("defaultvalue")
							)
							{
								$("div.error", formEl).html("Please complete all required fields.").show();
								
								return false;
							};
							
							var sender = $("input.sender", formEl).val();

							if (!filter.test(sender))
							{
								$("div.error", formEl).html("You have entered an invalid email.").show();
								
								return false;
							};
							
							var recipients = $("textarea.recipients", formEl).val();
							
							recipients = recipients.split(/,[ ]?/);
							
							// console.log(recipients);
							
							for (var i = 0; i < recipients.length; i++)
							{
								if (!filter.test(recipients[i]))
								{
									$("div.error", formEl).html("You have entered an invalid email.").show();
									
									return false;
								};
							};
							
							if ($("div.cc-me input.checkbox", formEl).is(":checked"))
							{
								recipients.push(sender);
							};
							
							var emailData = {
								
								recipients: recipients.join(","),
								
								sender: sender,
								
								message: $("textarea.message", formEl).val()
								
							};
														
							jQuery.post(g_contentRoot + "/users/email_link", emailData, function ()
							{
							
							});
							
							showDialog({
								view: "sent", 
								header: "Email Sent",
								state: "narrow email-link-sent",
								text: '\
									<p>Thank you for spreading the word about Links of the Week! We appreciate your support.</p>\
									\
									<strong>The Links of the Week Team</strong>\
								',
								position: [340, 176]
							});
						}
						else if ($(this).is(".button-cancel"))
						{
							hideDialog();
							
							return false;
						}
						else if ($(this).is(".privacy-policy"))
						{
							return true;
						};
						
						return false;
					}
				);
			},
			text: '\
\
<form id="send-email-link" class="standard">\
\
	<label>To</label>\
	\
	<textarea class="recipients"></textarea>\
	\
	<span class="note">Enter emails separated with commas.</span>\
	\
	<label class="from">From</label>\
	\
	<input type="text" class="text sender" defaultvalue="Your email address" />\
	\
	<span class="note">Will not be saved or re-used.</span>\
	\
	<div class="subject">\
		\
		<label>Subject</label>\
		\
		<span>Links of the Week</span>\
		\
	</div>\
	\
	<label>Message (Optional)</label>\
	\
	<textarea class="message"></textarea>\
	\
	<span class="note">A link to our site will be included at the end of your message.</span>\
	\
	<div class="cc-me">\
		\
		<input type="checkbox" class="checkbox" />\
		\
		<label>Send me a copy</label>\
		\
	</div>\
	\
	<div class="actions">\
		\
		<a href="#" class="button button-send">Send</a>\
		\
		<a href="#" class="button button-cancel">Cancel</a>\
		\
		<a href="' + g_contentRoot + '/privacypolicy" class="privacy-policy">Privacy Policy</a>\
		\
	</div>\
	\
	<div class="error"></div>\
	\
</form>\
			',
			// textState: "strong",
			position: [340, 176],
			suppressFade: true
		});
		*/
			
			/*
			showDialog({
				view: "sent", 
				header: "Email Sent",
				state: "narrow email-link-sent",
				text: '\
					<p>Thank you for spreading the word about Links of the Week! We appreciate your support.</p>\
					\
					<strong>The Links of the Week Team</strong>\
					\
					<div class="support-us">\
						\
						<h4>Also</h4>\
						\
						<ul>\
							\
							<li class="facebook"><a href="http://www.facebook.com/pages/Links-of-the-Week/93692507363" target="_blank">Become a fan on Facebook</a></li>\
							\
							<li class="twitter"><a href="http://twitter.com/linksoftheweek" target="_blank">Follow Us on Twitter</a></li>\
							\
						</ul>\
						\
					</div>\
				',
				position: [340, 176],
				suppressFade: true
			});
			*/
		
		/*
		showDialog({
			view: "sent",
			state: "narrow email-exists",
			header: "Email Already Registered",
			hollaback: function ()
			{
				$("#signup-exists-cancel, #signup-exists-profile").click(
					function ()
					{
						hideDialog();
						
						if ($(this).is("#signup-exists-profile"))
						{
							return true;
						}
						else
						{
							return false;
						};
					}
				);
			},
			text: '\
				<div id="signup-exists">\
					\
					<p>\
						This email is either already registered or it used to be. To manage your\
						Subscriber Profile, click on the button below.\
					</p>\
					\
					<a href="http://visitor.constantcontact.com/d.jsp?m=1102591137697&p=oi&go=Go&ea=" target="_blank" id="signup-exists-profile">Subscriber Profile</a>\
					\
					<a href="#" id="signup-exists-cancel">Cancel</a>\
					\
				</div>\
			',
			position: [339, 254],
			suppressFade: true
		});
		*/
		
		/*
		showDialog({
			view: "sent",
			state: "narrow",
			header: "email sign-up",
			hollaback: initSignupConfirmForm,
			text: '\
				<form id="signup-confirm">\
					\
					<label class="header">Select at least one Edition:</label>\
					\
					<ul>\
						\
						<li>\
							\
							<input type="checkbox" value="5" id="signup-confirm-list-us" />\
							\
							<label for="signup-confirm-list-us" class="us">U.S.</label>\
							\
						</li>\
						\
						<li>\
							\
							<input type="checkbox" value="4" id="signup-confirm-list-uk" />\
							\
							<label for="signup-confirm-list-uk" class="uk">U.K.</label>\
							\
						</li>\
						\
					</ul>\
					\
					<span class="note">Note:  Each Edition is sent as a separate email every Tuesday.</span>\
					\
					<a href="#" id="signup-confirm-finish">Finish</a>\
					\
					<a href="#" id="signup-confirm-cancel">Cancel</a>\
					\
				</form>\
			',
			position: [339, 254],
			suppressFade: true
		});
		*/
		
		/*
		showDialog({
			view: "sent",
			state: "narrow signup-successful",
			header: "sign-up successful",
			hollaback: function ()
			{
				$("#signup-success-share li.send-email a").click(
					function ()
					{
						showSendEmailDialog();
						
						return false;
					}
				);
			},
			text: '\
				<p>\
					Thank you for signing up for Links by Email!\
					Our next Issue will arrive in your inbox on Tuesday morning.\
				</p>\
				\
				<div class="support-us">\
					\
					<h4>Share Site</h4>\
					\
					<ul id="signup-success-share">\
						\
						<li class="facebook default"><a href="http://www.facebook.com/sharer.php?u=http://www.LinksoftheWeek.com/fbshare" target="_blank">Post Link to Site on Facebook</a></li>\
						\
						<li class="send-email"><a href="#">Send Email to Friends</a></li>\
						\
						<li class="twitter last"><a href="http://twitter.com/home?status=' + escape("Currently viewing:  http://www.LinksoftheWeek.com/") + '" target="_blank">Post Link to Site on Twitter</a></li>\
						\
					</ul>\
					\
				</div>\
			',
			position: [339, 254],
			suppressFade: true
		});
		*/

	}
);

// --------------------------------------------------------
// 
// --------------------------------------------------------
function preloadImages ()
{
	var i = new Image();
	
	i.src = g_contentRoot + "/img/global/bg_dialog2.jpg";
	
	i = new Image();
	
	i.src = g_contentRoot + "/img/forms/button_finish.png";

	i = new Image();
	
	i.src = g_contentRoot + "/img/forms/button_cancel.png";
}

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initFooterLinks ()
{
	$("#footer-actions-main li.send-email a").click(
		function ()
		{
			showSendEmailDialog();
			
			return false;
		}
	);
	
	return false;
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initLinkDetails ()
{
	$("div#content div.link-details a.title").each(
		function ()
		{
			addLinkDetailEvents($(this));
		}
	);
};

function addLinkDetailEvents (link)
{
	/*
	link.hover(
		function ()
		{
			var src = $("span.tail img", $(this)).attr("src");
			
			 $("span.tail img", $(this)).attr("src", src.replace("icon_link_l_inactive2", "icon_link_l_active2"));
		},
		function ()
		{
			var src = $("span.tail img", $(this)).attr("src");
			
			 $("span.tail img", $(this)).attr("src", src.replace("icon_link_l_active2", "icon_link_l_inactive2"));
		}
	);
	*/
	
	link.mousedown(
		function ()
		{
			$(this).attr("href", g_contentRoot + "/links/track/" + $(this).attr("linkid") + "/site");
			
			return true;
		}
	);
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initSignupForm ()
{
	var formEl = $("#signup");
	
	formEl.submit(handleSignupFormSubmit);

	var inputEl = $("input.text", formEl);
	
	inputEl.val(inputEl.attr("defaultvalue"));

	inputEl.focus(
		function ()
		{
			if (inputEl.val() == inputEl.attr("defaultvalue"))
			{
				inputEl.val("");
			};
		}
	);

	inputEl.blur(
		function ()
		{
			if (inputEl.val() == "")
			{
				inputEl.val(inputEl.attr("defaultvalue"));
			};
		}
	);
};

function handleSignupFormSubmit ()
{
	var formEl = $("#signup");
	
	var inputEl = $("input.text", formEl);

	var filter = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	if (!filter.test(inputEl.val()))
	{
		displaySignupFormError();
	}
	else
	{
		$("form#signup input.submit").css("opacity", 0.4);
		
		$("form#signup input.submit").unbind("submit").submit(function () { return false; });
		
		jQuery.get(g_contentRoot + "/users/email_signup", {
			// "l[]": lists,
			e: $("form#signup input.email").val()
		}, handleSignupConfirmSubmitComplete);
	
		/*
		showDialog({
			view: "sent",
			state: "narrow",
			header: "email sign-up",
			hollaback: initSignupConfirmForm,
			text: '\
				<form id="signup-confirm">\
					\
					<label class="header">Select at least one Edition:</label>\
					\
					<ul>\
						\
						<li>\
							\
							<input type="checkbox" value="5" id="signup-confirm-list-us" />\
							\
							<label for="signup-confirm-list-us" class="us">U.S.</label>\
							\
						</li>\
						\
						<li>\
							\
							<input type="checkbox" value="4" id="signup-confirm-list-uk" />\
							\
							<label for="signup-confirm-list-uk" class="uk">U.K.</label>\
							\
						</li>\
						\
					</ul>\
					\
					<span class="note">Note:  Each Edition is sent as a separate email every Tuesday.</span>\
					\
					<a href="#" id="signup-confirm-finish">Finish</a>\
					\
					<a href="#" id="signup-confirm-cancel">Cancel</a>\
					\
				</form>\
			',
			position: [339, 254],
			suppressFade: true
		});
		*/
	};

	return false;
};

/*
function initSignupConfirmForm ()
{
	$("form#signup-confirm input#signup-confirm-list-" + g_edition).attr("checked", "checked");
	
	$("a#signup-confirm-finish").click(handleSignupConfirmSubmit);

	$("a#signup-confirm-cancel").click(
		function ()
		{
			hideDialog();
			
			return false;
		}
	);
	
	$("a#signup-confirm-finish").focus();
};
*/

/*
function handleSignupConfirmSubmit ()
{
	if (!$("form#signup-confirm ul li input:checked").length)
	{
		$("form#signup-confirm").addClass("error");
		
		return false;
	};
	
	$("form#signup-confirm").removeClass("error");
	
	var lists = [];
	
	$("form#signup-confirm ul li input:checked").each(
		function ()
		{
			lists.push($(this).val());
		}
	);
	
	$("a#signup-confirm-finish").css("opacity", 0.4).unbind("click").click(function () { return false; });
	
	jQuery.get(g_contentRoot + "/users/email_signup", {
		"l[]": lists,
		e: $("form#signup input.email").val()
	}, handleSignupConfirmSubmitComplete);
	
	return false;
};
*/

function handleSignupConfirmSubmitComplete (data)
{
	var email = $("form#signup input.email").val();
	
	$("form#signup input.email").val($("form#signup input.email").attr("defaultvalue"));

	$("form#signup input.submit").css("opacity", 1);
	
	$("form#signup input.submit").unbind("submit").submit(handleSignupFormSubmit);
	
	if (data == "exists")
	{
		showDialog({
			view: "sent",
			state: "narrow email-exists",
			header: "Email Already Registered",
			hollaback: function ()
			{
				$("#signup-exists-cancel, #signup-exists-profile").click(
					function ()
					{
						hideDialog();
						
						if ($(this).is("#signup-exists-profile"))
						{
							return true;
						}
						else
						{
							return false;
						};
					}
				);
			},
			text: '\
				<div id="signup-exists">\
					\
					<p>\
						This email is either already registered or it used to be. To manage your\
						Subscriber Profile, click on the button below.\
					</p>\
					\
					<a href="http://visitor.constantcontact.com/d.jsp?m=1102591137697&p=oi&go=Go&ea=' + escape(email) + '" target="_blank" id="signup-exists-profile">Subscriber Profile</a>\
					\
					<a href="#" id="signup-exists-cancel">Cancel</a>\
					\
				</div>\
			',
			position: [339, 254],
			suppressFade: true
		});
	}
	else if (data == "success")
	{
		showDialog({
			view: "sent",
			state: "narrow signup-successful",
			header: "sign-up successful",
			hollaback: function ()
			{
				$("#signup-success-share li.send-email a").click(
					function ()
					{
						clearTimeout(g_dialogTimeout);
					
						showSendEmailDialog();
						
						return false;
					}
				);
			},
			text: '\
				<p>\
					Thank you for signing up for Links by Email!\
					Our next Issue will arrive in your inbox on Tuesday morning.\
				</p>\
				\
				<div class="support-us">\
					\
					<h4>Share</h4>\
					\
					<ul id="signup-success-share">\
						\
						<li class="facebook default"><a href="http://www.facebook.com/sharer.php?u=http://www.LinksoftheWeek.com/fbshare" target="_blank">Post Link to Site on Facebook</a></li>\
						\
						<li class="send-email"><a href="#">Send Email to Friends</a></li>\
						\
						<li class="twitter last"><a href="http://twitter.com/home?status=' + escape("Currently viewing:  http://www.LinksoftheWeek.com/") + '" target="_blank">Post Link to Site on Twitter</a></li>\
						\
					</ul>\
					\
				</div>\
			',
			// textState: "strong",
			position: [339, 254],
			fadeTimeout: 9000
		});
	};
};

function displaySignupFormError ()
{
	/*
	var dialogEl = $("#dialog");

	$("h2", dialogEl).html("invalid email address");

	$("p", dialogEl).html("You have entered an invalid email address. Please try again.");
	*/

	showDialog({
		view: "error", 
		header: "invalid email address",
		state: "narrow",
		text: "You have entered an invalid email address. Please try again.",
		// position: [264, 254]
		// position: [364, 254]
		position: [339, 254]
	});
};

function submitSignupForm (emailAddress)
{
	jQuery.get(g_contentRoot + "/subscriptions/add_to_list", {
		e: emailAddress
	}, handleSubmitSignupFormComplete);
};

function handleSubmitSignupFormComplete (data, textStatus)
{
	var dialogEl = $("#dialog");
	
	var dialogOptions = {};
	
	if (data == "already exists")
	{
		dialogOptions.header = "address already registered";
		
		dialogOptions.text = "This email address has already been registered to receive Links of the Week.";
		
		dialogOptions.view = "warning";
	}
	else if (data == "success")
	{
		dialogOptions.header = "sign-up successful";
		
		dialogOptions.text = "Thank you for signing up to receive Links of the Week via email.";
		
		dialogOptions.view = "check";

		var formEl = $("#signup");
		
		var inputEl = $("input.text", formEl);

		inputEl.val(inputEl.attr("defaultvalue"));
		
		inputEl.blur();
	}
	else
	{
		dialogOptions.header = "error";
		
		dialogOptions.text = "There was an error processing your request. Please try again later.";
		
		dialogOptions.view = "warning";
	};
	
	dialogOptions.position = [121, 191];
	
	showDialog(dialogOptions);
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initFlir ()
{
	FLIR.init( { path: g_contentRoot + '/facelift-1.2/' } );

	// FLIR.replace($("div#content h1 strong").get(), new FLIRStyle({ cFont: "dinot-regular", mode: "wrap" }));
	replaceText($("div#content h1 strong"), { cFont: "dinot-regular", mode: "wrap" });
	
	/*
	if (!($.browser.msie && parseInt($.browser.version) < 7))
	{
		// FLIR.replace($("p#current-issue span.date").get(), new FLIRStyle({ cFont: "dinot-bold" }));
		replaceText($("p#current-issue span.date"), { cFont: "dinot-bold" });
	};
	*/
	
	if ($("#login-status").length)
	{
		// FLIR.replace($("#login-status").get(), new FLIRStyle({ cFont: "dinot-medium" }));
		replaceText($("#login-status span"), { cFont: "dinot-medium", mode: "wrap" });
	};
	
	if ($("div#sidebar h2.best-of span").length)
	{
		updateSidebarBestOfHeader("Links of the Week");
	};
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initSponsorLogo ()
{
	$("div#sponsor a.sponsor-logo").click(handleSponsorLogoClick);

	$("div#sponsor a.sponsor-logo").focus(blurLink);
};

function handleSponsorLogoClick ()
{
	$(this).attr("href", g_contentRoot + "/sponsors/process_click");
	
	return true;
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
var g_dialogTimeoutId = null;

function initDialog ()
{
	var dialogEl = $("#dialog");

	dialogEl.wrap("<div id=\"dialog-container\"><div id=\"dialog-content\"></div></div>");
	
	$("#dialog-container").prepend("<div id=\"dialog-head\"></div>");

	$("#dialog-container").append("<div id=\"dialog-foot\"></div>");

	$("a.close", dialogEl).click(
		function ()
		{
			hideDialog();
			
			return false;
		}
	);

	$("a.close", dialogEl).focus(
		function ()
		{
			this.blur();
		}
	);
	
	$("#dialog").show();
};

function showDialog (options)
{
	var dialogEl = $("#dialog-container");

	$("h2", dialogEl).html(titleCaps(options.header));

	$("h2", dialogEl).removeClass().addClass(options.view);

	$("p", dialogEl).html(options.text).removeClass();
		
	if (options.textState) $("p", dialogEl).addClass(options.textState);
	
	dialogEl.css({
		left: options.position[0],
		top: options.position[1]
	});
	
	if (options.state)
	{
		dialogEl.removeClass().addClass(options.state);
	}
	else
	{
		dialogEl.removeClass();
	};

	setOpacity(dialogEl, 1).show();
	
	if (options.fadeTimeout) g_dialogTimeout = setTimeout(hideDialog, options.fadeTimeout);
	else if (!options.suppressFade) g_dialogTimeout = setTimeout(hideDialog, 5000);
	
	if (options.hollaback) options.hollaback();
};

function hideDialog ()
{
	var dialogEl = $("#dialog-container");
	
	clearTimeout(g_dialogTimeoutId);
	
	dialogEl.animate({
		opacity: 0
	}, {
		duration: 900,
		easing: "swing",
		complete: function () 
		{
			dialogEl.hide();
			
			clearOpacityFilter($(this));
		}
	});
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initSharingMenu ()
{
	$("#share-lotw ul.item-menu li.send-email a").click(
		function ()
		{
			showSendEmailDialog();
			
			return false;
		}
	);
	
	return false;
}

// --------------------------------------------------------
// 
// --------------------------------------------------------
function showSendEmailDialog ()
{
	showDialog({
		view: "sent",
		state: "narrow send-email-link",
		header: "Send Email to Friends",
		hollaback: function ()
		{
			$("#send-email-link div.actions a").click(
				function ()
				{
					var formEl = $("#send-email-link");
				
					var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
					
					$("div.error", formEl).hide();
					
					if ($(this).is(".button-send"))
					{
						if (
							$("textarea.recipients", formEl).val() == "" ||
							$("input.sender", formEl).val() == "" ||
							$("input.sender", formEl).val() == $("input.sender", formEl).attr("defaultvalue")
						)
						{
							$("div.error", formEl).html("Please complete all required fields.").show();
							
							return false;
						};
						
						var sender = $("input.sender", formEl).val();

						if (!filter.test(sender))
						{
							$("div.error", formEl).html("You have entered an invalid email.").show();
							
							return false;
						};
						
						var recipients = $("textarea.recipients", formEl).val();
						
						recipients = recipients.split(/,[ ]?/);
						
						// console.log(recipients);
						
						for (var i = 0; i < recipients.length; i++)
						{
							if (!filter.test(recipients[i]))
							{
								$("div.error", formEl).html("You have entered an invalid email.").show();
								
								return false;
							};
						};
						
						if ($("div.cc-me input.checkbox", formEl).is(":checked"))
						{
							recipients.push(sender);
						};
						
						var emailData = {
							
							recipients: recipients.join(","),
							
							sender: sender,
							
							message: $("textarea.message", formEl).val()
							
						};
													
						jQuery.post(g_contentRoot + "/users/email_link", emailData, function ()
						{
						
						});
						
						showDialog({
							view: "sent", 
							header: "Email Sent",
							state: "narrow email-link-sent",
							text: '\
								<p>Thank you for spreading the word about Links of the Week! We appreciate your support.</p>\
								\
								<strong>The Links of the Week Team</strong>\
								\
								<div class="support-us">\
									\
									<h4>Also</h4>\
									\
									<ul>\
										\
										<li class="facebook"><a href="http://www.facebook.com/sharer.php?u=http://www.LinksoftheWeek.com/fbshare" target="_blank">Post Link to Site on Facebook</a></li>\
										\
										<li class="twitter"><a href="http://twitter.com/home?status=' + escape("Currently viewing:  http://www.LinksoftheWeek.com/") + '" target="_blank">Post Link to Site on Twitter</a></li>\
										\
									</ul>\
									\
								</div>\
							',
							position: [340, 176]
						});
					}
					else if ($(this).is(".button-cancel"))
					{
						hideDialog();
						
						return false;
					}
					else if ($(this).is(".privacy-policy"))
					{
						return true;
					};
					
					return false;
				}
			);
		},
		text: '\
\
<form id="send-email-link" class="standard">\
\
<label>To</label>\
\
<textarea class="recipients"></textarea>\
\
<span class="note">Enter emails separated with commas.</span>\
\
<label class="from">From</label>\
\
<input type="text" class="text sender" defaultvalue="Your email address" />\
\
<span class="note">Will not be saved or re-used.</span>\
\
<div class="subject">\
	\
	<label>Subject</label>\
	\
	<span>Links of the Week</span>\
	\
</div>\
\
<label>Message (Optional)</label>\
\
<textarea class="message"></textarea>\
\
<span class="note">A link to our site will be included at the end of your message.</span>\
\
<div class="cc-me">\
	\
	<input type="checkbox" class="checkbox" />\
	\
	<label>Send me a copy</label>\
	\
</div>\
\
<div class="actions">\
	\
	<a href="#" class="button button-send">Send</a>\
	\
	<a href="#" class="button button-cancel">Cancel</a>\
	\
	<a href="' + g_contentRoot + '/privacypolicy" class="privacy-policy">Privacy Policy</a>\
	\
</div>\
\
<div class="error"></div>\
\
</form>\
		',
		// textState: "strong",
		position: [340, 176],
		suppressFade: true
	});
};
		
// --------------------------------------------------------
// 
// --------------------------------------------------------
function initItemMenus ()
{
	$("ul.item-menu li.toggle a").click(handleItemMenuToggle);

	$("ul.item-menu li.toggle a").focus(blurLink);
	
	$("body").click(hideItemMenus);
};

function handleItemMenuToggle ()
{
	var menuEl = $(this).parents("ul.item-menu");

	if (menuEl.is(".expanded"))
	{
		hideItemMenus();
	}
	else
	{
		$("li", menuEl).show();
		
		menuEl.addClass("expanded");
	};
	
	return false;
};

function hideItemMenus ()
{
	$("ul.item-menu.expanded li:not(.default, .toggle)").hide();

	$("ul.item-menu.expanded").removeClass("expanded");
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initRecentIssuesMenu ()
{
	// these methods should be generic
	$("#recent-issues ul.item-menu li a").hover(handleRouletteMenuItemOver, handleRouletteMenuItemOut);

	$("#recent-issues ul.item-menu li.default a").click(handleItemMenuToggle);
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initRouletteMenu ()
{
	$("#random-menu li:not(.toggle, .default) a").click(handleRouletteMenuItemClick);

	$("#random-menu li a").hover(handleRouletteMenuItemOver, handleRouletteMenuItemOut);

	// $("#random-menu li.default a").click(function () { return false; });
	
	$("#random-menu li:last").css("border-bottom", "1px solid #9c9c9c");

	$("#random-menu li.default a").click(handleItemMenuToggle);
};

function handleRouletteMenuItemOver ()
{
	if (!$(this).parent().is(".default")) $(this).css("background-color", "#eee");
};

function handleRouletteMenuItemOut ()
{
	$(this).css("background-color", "#fff");
};

function handleRouletteMenuItemClick ()
{
	hideItemMenus();
	
	return true;
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
/*
function initEditionMenu ()
{
	$("#edition-menu ul.item-menu li:not(.toggle, .default) a").click(handleEditionMenuItemClick);

	$("#edition-menu ul.item-menu li a").hover(handleEditionMenuItemOver, handleEditionMenuItemOut);

	// $("#edition-menu ul.item-menu li.default a").click(function () { return false; });
	
	$("#edition-menu ul.item-menu li:last").css("border-bottom", "1px solid #9c9c9c");

	$("#edition-menu li.default a").click(handleItemMenuToggle);
};

function handleEditionMenuItemOver ()
{
	if (!$(this).parent().is(".default"))
	{
		$(this).css("background-color", "#d91a23");

		$(this).css("color", "#fff");
	};
};

function handleEditionMenuItemOut ()
{
	$(this).css("background-color", "#fff");

	$(this).css("color", "#d91a23");
};

function handleEditionMenuItemClick ()
{
	if ($(this).parent().is(".default")) return false;
	
	self.location = g_contentRoot.substring(0, g_contentRoot.lastIndexOf("/")) + "/" + $(this).parent().attr("edition") + "/";
	
	// console.log(g_contentRoot.substring(0, g_contentRoot.lastIndexOf("/")) + "/" + $(this).parent().attr("edition"));
	
	return false;
};
*/

// --------------------------------------------------------
// 
// --------------------------------------------------------
/*
function initBestOfMenu ()
{
	$("#best-of-menu li:not(.toggle, .default) a").click(handleBestOfMenuClick);

	$("#best-of-menu li a").hover(handleBestOfMenuItemOver, handleBestOfMenuItemOut);

	$("#best-of-menu li.default a").click(function () { return false; });
	
	$("#best-of-menu li:last").css("border-bottom", "1px solid #9c9c9c");
	
	$("a#view-best-of").click(handleViewBestOfClick);

	$("a#view-best-of").focus(blurLink);
	
	$("a#best-of-back").click(handleBestOfBackClick);

	$("a#best-of-back").focus(blurLink);
	
	for (var period in bestOfLinks)
	{
		bestOfLinks[period].sort(
			function (a, b)
			{
				if (a.d.categoryPosition != b.d.categoryPosition)
				{
					if (a.d.categoryPosition == "start") return -1;
					if (b.d.categoryPosition == "start") return 1;

					if (a.d.categoryPosition == "normal") return -1;
					if (b.d.categoryPosition == "normal") return 1;
					
					// fail
					return 0;
				};
				
				if (a.d.categoryName < b.d.categoryName) return -1;
				if (a.d.categoryName > b.d.categoryName) return 1;

				return 0;
			}
		);
	};
	
	// tmp
	// populateBestOfCategoryMenu('1969-12');
	// populateBestOfLinkDetail('56');
};

function handleBestOfMenuItemOver ()
{
	if (!$(this).parent().is(".default")) $(this).css("background-color", "#eee");
};

function handleBestOfMenuItemOut ()
{
	$(this).css("background-color", "#fff");
};

function handleBestOfMenuClick ()
{
	var v = $(this).parent().attr("timeperiod");
	
	if (v != "")
	{
		$("a#view-best-of").removeClass("disabled");
		
		var menuEl = $(this).parents("ul.item-menu");
		
		$("li.default", menuEl).attr("timeperiod", v);

		$("li.default", menuEl).text($(this).text());
		
		hideItemMenus();
	}
	else
	{
		$("a#view-best-of").addClass("disabled");
	};
	
	return false;
};

function handleViewBestOfClick ()
{
	if (!$(this).is(".disabled"))
	{
		var p = $("#best-of-menu li.default").attr("timeperiod");
		
		populateBestOfCategoryMenu(p);

		updateSidebarBestOfHeader($("#best-of-menu li.default").text());
	};

	return false;
};

function handleBestOfBackClick ()
{
	if ($("#best-of-categories").is(":visible"))
	{
		$("#best-of-categories").hide();
		
		$("#best-of-back").hide();

		$("div#sidebar p.best-of").show();
		
		$("#best-of-menu").show();
		
		$("#complete-archives").show();
		
		$("#view-best-of").show();

		updateSidebarBestOfHeader("Links of the Week");
	}
	else if ($("#best-of-detail").is(":visible"))
	{
		$("#best-of-detail").hide();

		$("#best-of-categories").show();
	};
	
	return false;
};

function populateBestOfCategoryMenu (period)
{
	var categoryMenu = $("#best-of-categories");
	
	var maxItemsPerColumn = 7;
	
	categoryMenu.empty();
	
	var activeColumn = null;
			
	for (var i = 0; i < bestOfLinks[period].length; i++)
	{
		if (i % maxItemsPerColumn == 0)
		{
			activeColumn = $("<ol></ol>");
			
			var newColumnContainer = $("<li></li>");
			
			newColumnContainer.append(activeColumn);
			
			newColumnContainer.addClass("column").appendTo(categoryMenu);
		};
	
		var link = bestOfLinks[period][i];
		
		var linkEl = $("<a href=\"#\">" + link.d.categoryName + "</a>").click(handleCategoryClick).attr("linkid", link.d.id);
		
		$("<li></li>").append(linkEl).appendTo(activeColumn);
	};
	
	$("div#sidebar p.best-of").hide();
	
	$("#best-of-menu").hide();
	
	$("#complete-archives").hide();
	
	$("#view-best-of").hide();
	
	categoryMenu.show();
	
	$("#best-of-back").css("display", "block");
};

function handleCategoryClick ()
{
	populateBestOfLinkDetail($(this).attr("linkid"));
	
	return false;
};

function populateBestOfLinkDetail (linkId)
{
	var linkData = bestOfLinksById[linkId];
	
	var linkDetailEl = $("#best-of-detail");
	
	$("h3.category", linkDetailEl).text(linkData.d.categoryName);

	$("a.title", linkDetailEl).text(linkData.d.title).attr("href", linkData.d.url);

	if (linkData.d.bylineName || linkData.d.bylineSource)
	{
		if (linkData.d.bylineName)
		{
			$("p.byline span.name", linkDetailEl).text(linkData.d.bylineSource ? linkData.d.bylineName + ", " : linkData.d.bylineName);
		}
		else
		{
			$("p.byline span.name", linkDetailEl).text("");
		};
		
		if (linkData.d.bylineSource)
		{
			$("p.byline span.source", linkDetailEl).text(linkData.d.bylineSource);
		}
		else
		{
			$("p.byline span.source", linkDetailEl).text("");
		};
		
		$("p.byline", linkDetailEl).show();
	}
	else
	{
		$("p.byline", linkDetailEl).hide();
	};

	$("p.selector span.expert-name", linkDetailEl).text(linkData.d.expertName);

	$("p.selector span.expert-site", linkDetailEl).text(linkData.d.expertSiteName);
	
	$("p.message", linkDetailEl).text(linkData.d.message);

	$("p.issue span.number", linkDetailEl).text("Issue #" + linkData.d.issueNumber + ":");

	$("p.issue span.date", linkDetailEl).text(linkData.d.issueDateFormatted);

	$("a.check-it-out", linkDetailEl).attr("href", linkData.d.url);

	$("p.comment a.comment", linkDetailEl).attr("href", g_contentRoot + "/issue" + linkData.d.issueNumber + "/" + linkData.d.slug);

	$("#best-of-categories").hide();
	
	linkDetailEl.show();
};

function updateSidebarBestOfHeader (t)
{
	if (!$("div#sidebar h2.best-of span").length) return;
	
	// $("div#sidebar h2.best-of span").html(t).css("visibility", "hidden").removeClass()[0].flirReplaced = false;
	$("div#sidebar h2.best-of span").html(t).removeClass()[0].flirReplaced = false;
		
	replaceText($("div#sidebar h2.best-of span"), { cFont: "dinot-medium" });
};
*/

// --------------------------------------------------------
// 
// --------------------------------------------------------
function replaceText (el, options)
{
	el.css("visibility", "hidden");
	
	options.replaceComplete = function ()
	{
		if ($("img", el).length == $("img.flir-image-loaded", el).length)
		{
			if (options.hollaback) options.hollaback();
			
			el.css("visibility", "visible");
		}
		else
		{

		};
	};
	
	FLIR.replace(el.get(), new FLIRStyle(options));
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
/*
function initExpertDetails ()
{
	$("div.expert-details").each(
		function ()
		{
			$(this).attr("linkid", $(this).parent().attr("linkid")).appendTo($("body"));

			$("a.close", $(this)).click(handleHideExpertDetails);
		}
	);
	
	// $("#issue-categories-full li div.expert-details a.close").click(handleHideExpertDetails);
	
	// tmp
	//showFullLink(149);
};

function handleShowExpertDetails ()
{
	// var parentEl = $(this).parents("li.issue-category").eq(0);
	var parentEl = $(this).parents("li[linkid]").eq(0);
	
	var expertDetailEl = $("div.expert-details[linkid=" + parentEl.attr("linkid") + "]");

	var o = $("a.expert", parentEl).offset();
		
	// var p = expertDetailEl.parent().offset();
	
	$(this).addClass("active");
	
	// expertDetailEl.css({
	//	top: o.top - p.top - 8,
	//	left: o.left - p.left + $("a.expert", parentEl).width() - 2
	//}).show();
	
	expertDetailEl.css({
		top: o.top - 9, //($.browser.msie ? 8 : 9),
		left: o.left + $("a.expert", parentEl).width() - ($.browser.mozilla ? 1 : 2),
		zIndex: 1000
	}).show();
	
	return false;
};

function handleHideExpertDetails ()
{
	var detailEl = $(this).parents("div.expert-details").eq(0);
	
	// var parentEl = $("ol#issue-categories-full li[linkid=" + detailEl.attr("linkid") + "]").eq(0);
	var parentEl = $("div#content ol li[linkid=" + detailEl.attr("linkid") + "]").eq(0);
	
	detailEl.hide();
	
	$("a.expert", parentEl).removeClass("active");

	return false;
};
*/

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initIssueLayout ()
{	
	var maxCategoriesPerRow = $("ol#issue-categories li").length / 2; // 7;
	
	var issueEl = $("<table />").attr("cellspacing", "0").attr("id", "issue-categories-table");
	
	var rowEl = $("<tr />");
	
	$("ol#issue-categories li").each(
		function (i)
		{
			if (i && i % maxCategoriesPerRow == 0)
			{
				issueEl.append(rowEl);
				
				rowEl = $("<tr />");
			};
			
			var categoryEl = $("<div class=\"category\" />");
			
			var linkEl = $("<a />").attr("href", "#").attr("linkid", $("a", $(this)).attr("linkid")).appendTo(categoryEl);
			
			$("<div />").append($("<img />").attr("src", $("img", $(this)).attr("src"))).appendTo(linkEl);
			
			$("<strong />").html($("strong", $(this)).html()).appendTo(linkEl);
						
			$("<td />").append(categoryEl).appendTo(rowEl);
		}
	);
		
	// $("td", issueEl).resize(function () { console.log('resize'); });
	
	issueEl.append(rowEl).appendTo("div#content");
	
	$("ol#issue-links").remove();
	
	initIssueElementSizes();
	
	initIssueLinks();
	
	// initExpertDetails();
};

function initIssueElementSizes ()
{
	$("table#issue-categories-table td div.category").each(
		function ()
		{
			$("div", $(this)).css("background-image", "url(" + $("div img", $(this)).attr("src") + ")");
			
			$("strong", $(this)).width($(this).width()).css({
				marginLeft: "auto",
				marginRight: "auto"
			});
			
			$(this).css({
				float: "none",
				marginLeft: "auto",
				marginRight: "auto"
			});
						
			/*
			$(this).width(Math.max(50, $(this).width())).css({
				float: "none",
				marginLeft: "auto",
				marginRight: "auto"
			});
			*/
		}
	);
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function initIssueLinks ()
{	
	$("table#issue-categories-table td a").click(handleIssueLink);

	$("table#issue-categories-table td a").focus(blurLink);

	$("table#issue-categories-table td a").mouseover(handleIssueLinkOver);

	$("table#issue-categories-table td a").mouseout(handleIssueLinkOut);
	
	// $("#issue-categories-full li h5 a.expert").click(handleShowExpertDetails);

	// tmp
	// showFullLink(149);
};

function handleIssueLink ()
{
	var linkId = $(this).attr("linkid");

	showFullLink(linkId);
	
	return false;
};

function handleIssueLinkOver ()
{
	// setOpacity($(this), 1);
	setOpacity($("div", $(this)), 1);

	$("strong", $(this)).removeClass("faded");
	
	/*
	if ($.browser.msie)
	{
		setOpacity($("strong", $(this)), 1);
	};
	*/
};

function handleIssueLinkOut ()
{
	// if ($("h4#welcome").is(":hidden") && !$(this).is(".active"))
	if (
		(
			(!$("h4#welcome").length || $("h4#welcome").is(":hidden")) &&
			(!$("h4#issue-headline").length || $("h4#issue-headline").is(":hidden"))
		) && 
		!$(this).is(".active")
	)
	{
		// setOpacity($(this), 0.5, true);
		setOpacity($("div", $(this)), 0.5, true);
		
		$("strong", $(this)).addClass("faded");
		
		/*
		if ($.browser.msie)
		{
			setOpacity($("strong", $(this)), 0.5, true);
		};
		*/
	};
};

var g_totalFullLinkHeight = 90;

function showFullLink (linkId)
{
	// console.log($("ol#issue-categories-full li.active").attr("linkid") + ":" + linkId);
	
	if ($("table#issue-categories-table td a.active").attr("linkid") == linkId)
	{
		return;
	};

	$("ol#issue-categories-full li").hide();
	
	$("div.expert-details").hide();
	
	var fullLinkEl = $("ol#issue-categories-full li[linkid='" + linkId + "']");
			
	$("h4#welcome").css("visibility", "hidden");

	$("h4#issue-headline, h4#issue-headline *").css("visibility", "hidden");
		
	var linkEl = $("table#issue-categories-table td a[linkid='" + linkId + "']");
	
	// setOpacity($("table#issue-categories-table td a").not(linkEl), 0.5, true).removeClass("active");
	
	$("table#issue-categories-table td a").not(linkEl).each(
		function ()
		{
			setOpacity($("div", $(this)), 0.5, true);

			// setOpacity($(this), 0.5, true);
			
			$("strong", $(this)).addClass("faded");
			
			/*
			if ($.browser.msie)
			{
				setOpacity($("strong", $(this)), 0.5, true);
			};
			*/
			
			$(this).removeClass("active");
		}
	);

	linkEl.addClass("active");

	// $("h5 a.expert", fullLinkEl).removeClass("active");

	setOpacity(fullLinkEl, 0, true).show();
	
	var textEl = $("h3", fullLinkEl);
	
	// console.log(textEl);

	var imageCount = $("img", textEl).length;

	var imageHeight = $("img", textEl).height();
	
	var imageSpacing = 4;
	
	var imageStackHeight = imageHeight * imageCount;
	
	if (imageCount > 1)
	{
		imageStackHeight += imageSpacing;
	};
	
	$("img:first", textEl).css({
		marginTop: (textEl.parent().height() - imageStackHeight) / 2
	});

	if (imageCount > 1)
	{
		$("img:not(:last)", textEl).css({
			marginBottom: imageSpacing
		});
	};
	
	var itemHeight = $("div.link-details", fullLinkEl).height();
		
	// $("div.link-details", fullLinkEl).css("margin-top", (g_totalFullLinkHeight - itemHeight) / 2 - 3);
	$("div.link-details", fullLinkEl).css("margin-top", (g_totalFullLinkHeight - itemHeight) / 2 - 1);

	setOpacity(fullLinkEl, 1);
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
function blurLink ()
{
	this.blur();
};

function setOpacity (el, opacity, overrideClear)
{
	el.css("opacity", opacity);
	
	if ($.browser.msie && !overrideClear)
	{
		clearOpacityFilter(el);
	};
	
	return el;
};

function clearOpacityFilter (el)
{
	if ($.browser.msie)
	{
		el[0].style.removeAttribute('filter'); 	
	};
	
	return el;
};

// --------------------------------------------------------
// 
// --------------------------------------------------------
(function(){
	var small = "(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|v[.]?|via|vs[.]?)";
	var punct = "([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]*)";
  
	this.titleCaps = function(title){
		var parts = [], split = /[:.;?!] |(?: |^)["ñ]/g, index = 0;
		
		while (true) {
			var m = split.exec(title);

			parts.push( title.substring(index, m ? m.index : title.length)
				.replace(/\b([A-Za-z][a-z.'Í]*)\b/g, function(all){
					return /[A-Za-z]\.[A-Za-z]/.test(all) ? all : upper(all);
				})
				.replace(RegExp("\\b" + small + "\\b", "ig"), lower)
				.replace(RegExp("^" + punct + small + "\\b", "ig"), function(all, punct, word){
					return punct + upper(word);
				})
				.replace(RegExp("\\b" + small + punct + "$", "ig"), upper));
			
			index = split.lastIndex;
			
			if ( m ) parts.push( m[0] );
			else break;
		}
		
		return parts.join("").replace(/ V(s?)\. /ig, " v$1. ")
			.replace(/(['Í])S\b/ig, "$1s")
			.replace(/\b(AT&T|Q&A)\b/ig, function(all){
				return all.toUpperCase();
			});
	};
    
	function lower(word){
		return word.toLowerCase();
	}
    
	function upper(word){
	  return word.substr(0,1).toUpperCase() + word.substr(1);
	}
})();
