// replacement of submit buttons with custom submit links
function replaceSubmitButton(wrapper, cssClass)
{
	var submitBtn = wrapper.find('input:submit');
	var submitLink = jQuery('<a href="#" class="' + cssClass + '"><span>' + submitBtn.val() + '</span></a>');
	submitBtn.replaceWith(submitLink);
	submitLink
		.click(function()
				{
					var form = jQuery(this).parents('form');
					form.submit();
					return false;
				})
		.after('<div class="clr"></div>');
	
}

function replaceSubmitButtons(wrapper)
{
	if(!wrapper)
		var wrapper = jQuery('form');
	replaceSubmitButton(wrapper, 'lnkBtn');
}

function initPopupFormOverlays(wrapper)
{
	if(!wrapper)
		var wrapper = jQuery('body');
		
	wrapper.find('a.lnkTellAFriend')
		.unbind('click')
		.click(function()
				{
					var sendEmailLink = jQuery(this);
					var sendEmailForm = new AJAXForm({
										popupFormTrigger: sendEmailLink,
										dynamicWrapperId: 'AJAXTellAFriendForm',
										AJAXpageUrl: getAJAXurl(sendEmailLink.attr('href')),
										AJAXpageElementsFilter: '.PopupContent',
										formLoadCallBack: function(dynamicContentWrapper)
												{
													replaceSubmitButtons(dynamicContentWrapper);
													initPopupFormOverlays(dynamicContentWrapper);
													initFormFocus(dynamicContentWrapper);
												},
										successCallBack: null,
										closeOnSuccessfulSubmit: true
									 });
					
					return false;
				});
		
	wrapper.find('a.lnkRegister')
			.unbind('click')
			.click(function()
					{
						var registerLink = jQuery(this);
						var registerForm = new AJAXForm({
											popupFormTrigger: registerLink,
											dynamicWrapperId: 'AJAXRegisterForm',
											AJAXpageUrl: getAJAXurl(registerLink.attr('href')),
											AJAXpageElementsFilter: '.RegisterContent',
											formLoadCallBack: function(dynamicContentWrapper)
													{
														var redirect = dynamicContentWrapper.find('input[name=redirectURL]');
														if (redirect.size() > 0)
														{
															if(jQuery.trim(redirect.val()) == '')
																location.reload()
															else
																location = redirect.val();
														}
														else
														{
															replaceSubmitButtons(dynamicContentWrapper);
															initPopupFormOverlays(dynamicContentWrapper);
															initFormFocus(dynamicContentWrapper)
														}
													},
											successCallBack: function(dynamicContentWrapper){
															initPopupFormOverlays(dynamicContentWrapper);
														},
											closeOnSuccessfulSubmit: false
										 });
						
						return false;
					});

	wrapper.find('a#lnkRegisterStep2')
			.unbind('click')
			.click(function()
					{
						var registerLink = jQuery(this);
						var registerForm = new AJAXForm({
											popupFormTrigger: registerLink,
											dynamicWrapperId: 'AJAXRegisterForm',
											AJAXpageUrl: getAJAXurl(registerLink.attr('href')),
											AJAXpageElementsFilter: '.PopupContent',
											formLoadCallBack: function(dynamicContentWrapper)
													{
														replaceSubmitButtons(dynamicContentWrapper);
														initPopupFormOverlays(dynamicContentWrapper);
														initFormFocus(dynamicContentWrapper)
													},
											successCallBack: function(dynamicContentWrapper){
															initPopupFormOverlays(dynamicContentWrapper);
															reloadLearderBoard();
														},
											closeOnSuccessfulSubmit: false
										 });
						
						return false;
					});
			
	wrapper.find('a.ReloadRegister')
			.unbind('click')
			.click(function()
					{
						var rrLink = jQuery(this);
						var registerForm = new AJAXForm({
											popupFormTrigger: rrLink,
											dynamicWrapperId: 'AJAXRegisterForm',
											AJAXpageUrl: getAJAXurl(rrLink.attr('href')),
											AJAXpageElementsFilter: '.PopupContent',
											formLoadCallBack: function(dynamicContentWrapper)
													{
														replaceSubmitButtons(dynamicContentWrapper);
														initPopupFormOverlays(dynamicContentWrapper);
														initFormFocus(dynamicContentWrapper)
													},
											successCallBack: function(dynamicContentWrapper)
													{
														initPopupFormOverlays(dynamicContentWrapper);
														reloadLearderBoard();
													},
											closeOnSuccessfulSubmit: false
										 });
						
						return false;
					});
			
	wrapper.find('a.ReloadEmailRegister')
			.unbind('click')
			.click(function()
					{
						$('#AJAXTellAFriendForm').remove();
						var rerLink = jQuery(this);
						var registerForm = new AJAXForm({
											popupFormTrigger: rerLink,
											dynamicWrapperId: 'AJAXRegisterForm',
											AJAXpageUrl: getAJAXurl(rerLink.attr('href')),
											AJAXpageElementsFilter: '.PopupContent',
											formLoadCallBack: function(dynamicContentWrapper)
													{
														replaceSubmitButtons(dynamicContentWrapper);
														initPopupFormOverlays();
														initFormFocus(dynamicContentWrapper)
													},
											successCallBack: function(dynamicContentWrapper)
													{
														initPopupFormOverlays(dynamicContentWrapper);
													},
											closeOnSuccessfulSubmit: false
										 });
						
						return false;
					});
}


function getAJAXurl(url)
{
	//return url; // temp
	var ajxUrl = new String(url);
	var filter = new RegExp(".[a-zA-Z]{2,4}$", "mig");
	return ajxUrl.replace(filter, "/ajax");
}

function initFormFocus(wrapper)
{
	if(!wrapper)
		var wrapper = jQuery('form:first');
		
	wrapper.find('input:text:first').focus();
}

function initExpandCollapseControls()
{
	var rw = jQuery('li.Recipe');
	if(rw.size() > 0)
	{
		rw.each(function()
			{
				var ri = jQuery(this);
				var collapsedArea = ri.find('.RecipeShortDescription');
				var expandedArea = ri.find('.RecipeLongDescription');
				collapsedArea.css('display', 'none');
				expandedArea.css('display', 'block');
				
				var lh = ri.find('.MediaContent').height() + parseInt(ri.find('.MediaContent').css('paddingBottom')) + 20;
				var rh = ri.find('.TextContent').height();
				
				if(lh >= rh)
				{
					ri.addClass('ExpandedByDefault');
					ri.find('a.lnkViewDetails').css('visibility', 'hidden');
					ri.find('.ItemFooter').css({
									   borderTop: '1px solid #9DCE8F',
									   paddingTop: '10px'
								   });
					ri.find('.RecipeActionControls').css('display', 'block');
				}
				else{
					collapsedArea.css('display', 'block');
					expandedArea.css('display', 'none');
				}
				
				//console.log(lh + '/' + rh);
			})
	}
	 
	
	var triggers = jQuery('.RecipesList a.lnkViewDetails');
	if(triggers.size() > 0)
	triggers
		.click(function()
			{
				var tg = jQuery(this);
				var mainWrapper = tg.parents('li.Recipe:first');
				expandCollapseRecipeInfo(jQuery('.RecipesList li.Expanded').not(mainWrapper));
				expandCollapseRecipeInfo(mainWrapper);
				return false;
				
			})
}

function expandCollapseRecipeInfo(recipeWrappers)
{
	recipeWrappers
		.each(function()
			{
				var recipeWrapper = jQuery(this);
				if(!recipeWrapper.hasClass('ExpandedByDefault'))
				{
					var trigger = recipeWrapper.find('a.lnkViewDetails');
					var collapsedArea = recipeWrapper.find('.RecipeShortDescription');
					var expandedArea = recipeWrapper.find('.RecipeLongDescription');
					if(expandedArea.css('display') == 'none')
					{			
						trigger.html('collapse&raquo;');
						collapsedArea.css('display', 'none');
						expandedArea.css('display', 'block');
						recipeWrapper.addClass('Expanded');
					}
					else
					{
						trigger.html('read more&raquo;');
						expandedArea.css('display', 'none');
						collapsedArea.css('display', 'block');
						recipeWrapper.removeClass('Expanded');
					}
				}
			});
}

function initPrintControls()
{
	jQuery('a.lnkPrint')
		.click(function()
			{
				var mainWrapper = jQuery(this).parents('li.Recipe:first');
				expandCollapseRecipeInfo(jQuery('.RecipesList li.Expanded').not(mainWrapper));
				mainWrapper.addClass('Expanded');
				
				print();
				return false;
			})
}

function initRegisterOverlay()
{
	var regOverlayWrapper = jQuery("#RegistrationOverlay");
	if(regOverlayWrapper.size() > 0)
	{
		var regOverlay = regOverlayWrapper.overlay({api: true, top: 'center'}); 
		
		regOverlay.load();
		
		if(regOverlayWrapper.find('.loading').size() == 0)
			regOverlayWrapper.append('<div class="loading" style="display: none">loading</div>');
		
		initRegisterStep1(regOverlayWrapper);
	}
}

function initRegisterStep1(regOverlayWrapper)
{
	//console.log('step 1');
	var regOverlayWrapper = regOverlayWrapper;
	var regOverlayContent = regOverlayWrapper.find('.OverlayContent');
	
	initRegisterLogout(regOverlayWrapper, regOverlayContent);
	
	var regNowLink = jQuery("#RegistrationOverlay a.lnkRegisterNow");
	regNowLink
		.unbind('click')
		.click(function()
			{
				var lnk = jQuery(this);
				regOverlayContent.css('display', 'none');
				regOverlayWrapper.find('.loading').css('display', 'block');
				jQuery.ajax({
					url: lnk.attr('href'),
					type: 'get',
					success: function(AJAXresponse)
						{
							regOverlayContent.empty();							
							regOverlayContent.append(AJAXresponse);
							
							var step2form = regOverlayContent.find('form');
							if(step2form.size() > 0)
							{
								replaceSubmitButton(step2form, 'lnkBtn');
								initRegisterStep2(regOverlayWrapper, regOverlayContent, step2form);
							}
							else
							{
								initRegisterStep2_1(regOverlayWrapper, regOverlayContent);
							}
							
							initRegisterLogout(regOverlayWrapper, regOverlayContent);
							
							regOverlayWrapper.find('.loading').css('display', 'none');
							regOverlayContent.css('display', 'block');
						},
					error: function()
						{
							alert('An unknown error has occured while performing your action. Please refresh the page an try again.');
						}
				    });
				return false;
			});
	initRegisterLogout(regOverlayWrapper, regOverlayContent);
}

function initRegisterStep2(regOverlayWrapper, regOverlayContent, step2form)
{

	var regOverlayWrapper = regOverlayWrapper;
	var regOverlayContent = regOverlayContent;
	
	step2form
		.submit(function()
			{
				var frm = jQuery(this);
				regOverlayContent.css('display', 'none');
				regOverlayWrapper.find('.loading').css('display', 'block');
				jQuery
					.ajax({
							url: frm.attr('action'),
							type: frm.attr('method'),
							data: frm.serialize(),
							success: function(AJAXresponse)
								{
									regOverlayContent.empty();
									regOverlayContent.append(AJAXresponse);
									var step2form = regOverlayContent.find('form');
									if(step2form.size() > 0) // errors on submit
									{
										replaceSubmitButton(step2form, 'lnkBtn');
										initRegisterStep2(regOverlayWrapper, regOverlayContent, step2form);
									}
									else
										initRegisterStep3(regOverlayWrapper, regOverlayContent);
									
									initRegisterLogout(regOverlayWrapper, regOverlayContent);
									initPopupFormOverlays(regOverlayWrapper);
									
									regOverlayWrapper.find('.loading').css('display', 'none');
									regOverlayContent.css('display', 'block');
								},
							error: function()
								{
									alert('An unknown error has occured while performing your action. Please refresh the page an try again.');
								}
						 })
				return false;
			})
}

function initRegisterStep2_1(regOverlayWrapper, regOverlayContent)
{
	//console.log('step 1');
	var regOverlayWrapper = regOverlayWrapper;
	var regOverlayContent = regOverlayContent;
	
	var regNowLink = regOverlayContent.find("a.lnkRegisterNow");
	var regLogoutLink = regOverlayContent.find("a.ReloadRegister");
	regNowLink
		.unbind('click')
		.click(function()
			{
				var lnk = jQuery(this);
				regOverlayContent.css('display', 'none');
				regOverlayWrapper.find('.loading').css('display', 'block');
				jQuery.ajax({
					url: lnk.attr('href'),
					type: 'get',
					success: function(AJAXresponse)
						{
							regOverlayContent.empty();							
							regOverlayContent.append(AJAXresponse);
							
							var step2form = regOverlayContent.find('form');
							if(step2form.size() > 0)
							{
								replaceSubmitButton(step2form, 'lnkBtn');
								initRegisterStep2(regOverlayWrapper, regOverlayContent, step2form);
							}
							else
							{
								initRegisterStep2_1(regOverlayWrapper, regOverlayContent);
								initRegisterLogout(regOverlayWrapper, regOverlayContent);
							}
							
							regOverlayWrapper.find('.loading').css('display', 'none');
							regOverlayContent.css('display', 'block');
						},
					error: function()
						{
							alert('An unknown error has occured while performing your action. Please refresh the page an try again.');
						}
				    });
				return false;
			})
}

function initRegisterStep3(regOverlayWrapper, regOverlayContent)
{
	var backLink = regOverlayContent.find("a.lnkBackToCategory");
	backLink
		.click(function()
			{
				var overlay = regOverlayWrapper.overlay();
				overlay.close();
				return false;
			});
}

function initRegisterLogout(regOverlayWrapper, regOverlayContent)
{
	var regOverlayWrapper = regOverlayWrapper;
	var regOverlayContent = regOverlayContent;
	
	var regLogoutLink = regOverlayWrapper.find("a.ReloadRegister");
	regLogoutLink
		.unbind('click')
		.click(function()
			{
				var lnk = jQuery(this);
				regOverlayContent.css('display', 'none');
				regOverlayWrapper.find('.loading').css('display', 'block');
				jQuery.ajax({
					url: lnk.attr('href'),
					type: 'get',
					success: function(AJAXresponse)
						{
							regOverlayContent.empty();							
							regOverlayContent.append(AJAXresponse);
							
							var step2form = regOverlayContent.find('form');
							if(step2form.size() > 0)
							{
								replaceSubmitButton(step2form, 'lnkBtn');
								initRegisterStep2(regOverlayWrapper, regOverlayContent, step2form);
							}
							else
							{
								initRegisterStep2_1(regOverlayWrapper, regOverlayContent);
							}
							
							initRegisterLogout(regOverlayWrapper, regOverlayContent);
							
							regOverlayWrapper.find('.loading').css('display', 'none');
							regOverlayContent.css('display', 'block');
						},
					error: function()
						{
							alert('An unknown error has occured while performing your action. Please refresh the page an try again.');
						}
				    });
				return false;
			})
}

function shareThis() 
{
	FB.ensureInit(function () {
		FB.Bootstrap.requireFeatures(["Connect"], function() {     
			FB.Connect.requireSession( function () {                        
//				trackThis("sharePrompt");
	 
				var attachment = {'name':'Stack and Give Back!', 'description':'Play Frigidaire & Jennifer Garner\'s Stack and Give Back game and help support Save the Children. http://bit.ly/stackgiveback', 'media':[{'type':'image','src':"http://www.maketimeforchange.com/assets/common/img/logoMaketimeForChange.gif",'href':'http://www.maketimeforchange.com/'}]};
				var action_link = [{ "text": "Play Now", "href": "http://bit.ly/stackgiveback"}];
				FB.Connect.streamPublish('', attachment, action_link, null, '', shareCallback);

			});
		});
	
	});
	return false;

}

function shareCallback(post_id)
{
	var obj = post_id;
	if(obj === null || obj === 'null') {
//		trackThis("fbShareSkipped");
	} else {
//		trackThis("fbShareSuccess");
	}
}

function fbs_click(msg)
{
	u=location.href;
	t=msg;//t=document.title;
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}
	
jQuery(function(){
	initPopupFormOverlays();
	initExpandCollapseControls();
	initRegisterOverlay();
	initPrintControls()
})