// 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;
				})
}

function initSNLinks()
{
	jQuery('a.lnkTwitterShare')
		.click(function()
			{
				//alert('Click on Facebook link');
				trackThis("twitter-posted");
				return true;
			});

	jQuery('a.lnkTwitter')
		.click(function()
			{
				//alert('Click on Facebook link');
				trackThis("twitter-share");
				return true;
			});

	jQuery('a.lnkStumbleShare')
		.click(function()
			{
				//alert('Click on Facebook link');
				trackThis("stumble-posted");
				return true;
			});

	jQuery('a.lnkStumble')
		.click(function()
			{
				//alert('Click on Facebook link');
				trackThis("stumble-share");
				return true;
			});

		
	jQuery('a.lnkFacebook')
		.click(function()
			{
				//alert('Click on Facebook link');
				trackThis("facebook-share");
				fbs_click();
				return true;
			});
}


function replaceSubmitButtons()
{	
	replaceSubmitButton(jQuery('form'), 'linkButtonType2');
}

function IE()
{
	return (jQuery.browser.msie)
}

function initMainNav()
{
	
	jQuery('#MainNav>ul')
		.superfish({
				autoArrows: false,
				onInit: function()
					{
						var nav = jQuery(this);
						nav.find('ul.NavLevel2')
							.each(function()
								{
									var subNav = jQuery(this);
									//subNav.css('width', subNav.parents('li:first').width() + 4 + 'px')
								})
					  }
			 });
}

function initPopupFormOverlays()
{
	jQuery('a.lnkForgotPassword')
		.unbind('click')
		.click(function()
				{
					var fpLink = jQuery(this);
					var fpForm = new AJAXForm({
									popupFormTrigger: fpLink,
									dynamicWrapperId: 'AJAXForgotPasswordForm',
									AJAXpageUrl: getAJAXurl(fpLink.attr('href')),
									AJAXpageElementsFilter: 'h3, .notice_error, .notice_success, .notice_warning, form[name=ForgotPasswordForm]',
									formLoadCallBack: function(dynamicContentWrapper)
														{
															replaceSubmitButtons(dynamicContentWrapper);
															initPopupFormOverlays();
														},
									successCallBack: null,
									closeOnSuccessfulSubmit: false
								 });
					
					return false;
				});
		
	jQuery('a.lnkRegister')
		.unbind('click')
		.click(function()
				{
					var registerLink = jQuery(this);
					var registerForm = new AJAXForm({
										popupFormTrigger: registerLink,
										dynamicWrapperId: 'AJAXRegisterForm',
										AJAXpageUrl: getAJAXurl(registerLink.attr('href')),
										AJAXpageElementsFilter: 'h3, .notice_error, .notice_success, .notice_warning, form[name=AlternativeRegisterForm]',
										formLoadCallBack: function(dynamicContentWrapper){replaceSubmitButtons(dynamicContentWrapper)},
										successCallBack: null,
										closeOnSuccessfulSubmit: false
									 });
					
					return false;
				});
		
	jQuery('a.lnkSignIn')
		.unbind('click')
		.click(function()
				{
					var signInLink = jQuery(this);
					var signInLinkForm = new AJAXForm({
										popupFormTrigger: signInLink,
										dynamicWrapperId: 'AJAXSignInForm',
										AJAXpageUrl: getAJAXurl(signInLink.attr('href')),
										AJAXpageElementsFilter: 'h3, .notice_error, .notice_success, .notice_warning, form:last',
										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();
													}
												},
										successCallBack: null,
										closeOnSuccessfulSubmit: true,
										offsetX: -50,
										offsetY: 20
									 });
					
					return false;
				});
		
	jQuery('a.TipVoteButton_Login')
		.unbind('click')
		.click(function()
				{
					var signInToVoteLink = jQuery(this);
					var signInToVoteLinkForm = new AJAXForm({
										popupFormTrigger: signInToVoteLink,
										dynamicWrapperId: 'AJAXSignInToVoteForm',
										AJAXpageUrl: getAJAXurl(signInToVoteLink.attr('href')),
										AJAXpageElementsFilter: 'h3, .notice_error, .notice_success, .notice_warning, form:last',
										formLoadCallBack: function(dynamicContentWrapper, popupTrigger, ajaxFrm)
												{
													var redirect = dynamicContentWrapper.find('input[name=redirectURL]');
													if (redirect.size() > 0)
													{
														ajaxFrm.closePopup();
														var activeTipWrapper = popupTrigger.parents('.TipControls');
														saveVote(activeTipWrapper.find('a.TipVoteButton[rel=userVoting]'));
														jQuery('a.TipVoteButton_Login').remove();
														initVoteModules(jQuery('.TipControls').not(activeTipWrapper));
														ajaxFrm.closePopup(); //no redirect
														
														/*if(jQuery.trim(redirect.val()) == '')
															location.reload()
														else
															location = redirect.val();*/
													}
													else
													{
														replaceSubmitButtons(dynamicContentWrapper);
														initPopupFormOverlays();
													}
												},
										successCallBack: function(dynamicContentWrapper, popupTrigger, ajaxFrm)
												{
													var activeTipWrapper = popupTrigger.parents('.TipControls');
													saveVote(activeTipWrapper.find('a.TipVoteButton[rel=userVoting]'));
													jQuery('a.TipVoteButton_Login').remove();
													initVoteModules('.TipControls').not(activeTipWrapper);
													ajaxFrm.closePopup();
												},
										closeOnSuccessfulSubmit: true,
										offsetX: -300,
										offsetY: 60
									 });
					
					return false;
				});
		
	jQuery('a.lnkTellAFriend')
		.unbind('click')
		.click(function()
				{
					var tafLink = jQuery(this);
					var tafForm = new AJAXForm({
									popupFormTrigger: tafLink,
									dynamicWrapperId: 'AJAXTellAFriendForm',
									AJAXpageUrl: getAJAXurl(tafLink.attr('href')),
									AJAXpageElementsFilter: 'h3, .notice_error, .notice_success, .notice_warning, form',
									formLoadCallBack: function(dynamicContentWrapper){replaceSubmitButtons(dynamicContentWrapper)},
									successCallBack: null,
									closeOnSuccessfulSubmit: true,
									offsetX: -420,
									offsetY: 30
								 });
					
					return false;
				});

}

function getAJAXurl(url)
{
//	return url;
	var ajxUrl = new String(url);
	var filter = new RegExp(".[a-zA-Z]{2,4}$", "mig");
	return ajxUrl.replace(filter, "/ajax");
}


function resizeVerticalElements(jqElements)
{
 	if(jqElements.size() > 0)
	{
		var maxH = 0;
		jqElements
			.css('height', 'auto')
			.each(function()
			{
					var eh = jQuery(this).height();
					if(eh > maxH)
					maxH = eh;

			});
			jqElements.css('height', maxH + 'px');
	}
}

function initExpandableItems()
{
	var expandableItems = jQuery('.ThemesList .ThemeDetailedDescription');
	if(expandableItems.size() > 0)
	{
		expandableItems
			.each(function()
				{
				var expandableItem = jQuery(this);
				var contentFirstNode = expandableItem.find('>:first');
				
				if(contentFirstNode.size() > 0)
				{
					var parent = contentFirstNode.parent();
					
					var extraContentWrapper = jQuery('<div class="extraContent" style="display: none"></div>');
					parent.find('>*').not(contentFirstNode).wrapAll(extraContentWrapper);
					contentFirstNode.after(extraContentWrapper);
					
					jQuery('<span class="read-more">...</span>').appendTo(parent);
					
					var vtb = jQuery('<a class="linkButtonType2_small lnkViewMore" href="#">Read More</a>');
					vtb.appendTo(parent)
						.click(function()
							{
								var btn = jQuery(this);
								var extraContent = btn.siblings('.extraContent');
								var rmInd = btn.siblings('.read-more');
								
								if (extraContent.css('display') == 'none')
								{
									extraContent.fadeIn('fast');
									rmInd.css('display', 'none');
									btn.text('Collapse View');
								}
								else
								{
									extraContent.fadeOut('fast');
									rmInd.css('display', 'inline');
									btn.text('Read More');
								}
								return false;
							})
				}
				
				else
				{
					expandableItem
		.expander({
			  	slicePoint: 300,
				expandText: 'Read More',
				userCollapseText: 'Collapse View',
				expandEffect: IE()?'show':'fadeIn',
				expandClass: 'linkButtonType2_small lnkViewMore',
				userCollapseClass: 'linkButtonType2_small lnkViewMore'
			});

				}
			})
	}
}

// tips voting
	function initVoteModules(wrapper)
	{
		if (wrapper)
			var voteCounters = wrapper.find('em.TipVotesNumber[rel=userVoting]')
		else
			var voteCounters = jQuery('.TipControls em.TipVotesNumber[rel=userVoting]');
			
		voteCounters
			.each(function()
					{
						var vcounter = jQuery(this);
						getLikes(vcounter);
					})
	}

	function getLikes(vcounter)
	{
		var voteCounter = vcounter;
		voteCounter.addClass('VotesCounterPending');	
		
		var d = new Date();
		var ajaxUrl = new String(voteCounter.attr('ajaxUrl'));
		ajaxUrl = ajaxUrl.replace('.html', '/' + d.getTime() + '.html') // custom caching for code igniter
		
		var voteLink = voteCounter.parents('.TipControls').find('a.TipVoteButton[rel=userVoting]');
		
		jQuery
			.ajax({
					url: ajaxUrl,
					success: function(json)
						{
							var serverResponse = eval('(' + json + ')');
							if(serverResponse)
							{
								if(parseInt(serverResponse.AddLinkEnabled) > 0)
								{
									activateVoteLink(voteLink);
									voteLink.removeClass('TipVoteButtonOff');
									voteLink.html(serverResponse.Message);
									voteCounter.html(serverResponse.NrEntriesText);
								}
								else
								{
									voteCounter.html(serverResponse.NrEntriesText);								
									switch(serverResponse.Status)
									{
										case 'log_in': {
													var voteControlsWrapper = voteLink.parents('.TipControls');
													var LoginLink = voteControlsWrapper.find('a.TipVoteButton_Login');
													if(LoginLink.size() == 0)
													{
														var LoginLink = jQuery('<a class="TipVoteButton_Login" href="login/ajax.html">Login</a>');									var voteMsg = jQuery('<span class="TipVoteButtonMsg"></span>');
														LoginLink.appendTo(voteLink.parents('.TipControls'));
														initPopupFormOverlays();
													}
													break;
												}
										default: {
												var voteMsg = jQuery('<span class="TipVoteButtonMsg"></span>');
												voteLink.replaceWith(voteMsg);
												voteMsg.html(serverResponse.Message);
											}
									}
								}
								voteCounter.removeClass('VotesCounterPending');
							}
						},
					error: function(err)
							{
								
							}
						
				  })
	}

	function activateVoteLink(vLink)
	{
		vLink
			.unbind('click')
			.click(function()
					{
						var vlnk = jQuery(this);
						saveVote(vlnk);
						return false;
					})
	}

	function saveVote(vLink)
	{
		var voteLink = vLink;
		var voteCounter = voteLink.parents('.TipControls').find('em.TipVotesNumber[rel=userVoting]');
		voteLink.addClass('TipVoteButtonPending');
		voteCounter.addClass('VotesCounterPending');
		
		var d = new Date();
		var ajaxUrl = new String(voteLink.attr('href'));
		ajaxUrl = ajaxUrl.replace('.html', '/' + d.getTime() + '.html') // custom caching for code igniter
		
		jQuery
			.ajax({
					url: ajaxUrl,
					success: function(json)
								{
									var serverResponse = eval('(' + json + ')');
									if(serverResponse)
									{
										if(parseInt(serverResponse.AddLinkEnabled) > 0)
										{
											voteLink.html(serverResponse.Message);
											activateVoteLink(voteLink);
											voteLink.removeClass('TipVoteButtonOff');
										}
										else
										{
											voteLink.addClass('TipVoteButtonOff');
											var voteMsg = jQuery('<span class="TipVoteButtonMsg"></span>');
											voteLink.replaceWith(voteMsg);
											voteMsg.html(serverResponse.Message);
										}
										
										voteCounter.html(serverResponse.NrEntriesText);
										voteCounter.removeClass('VotesCounterPending');
									}
								},
					error: function(err)
							{
								
							}
						
				  })
	}
	
	function initAJAXTipsPagination(wrapper)
	{
		if(!wrapper)
			wrapper = jQuery('body');
			
		var ajaxPaginationLinks = wrapper.find('.pagination a');
		ajaxPaginationLinks
			.click(function()
					{
						var ajaxPaginationLink = jQuery(this);
						var ajaxUrl = ajaxPaginationLink.attr('href');
						var tabContent = ajaxPaginationLink.parents('.ui-tabs-panel');
						
						updateAJAXTabContent(tabContent, ajaxUrl);
						
						return false;
					})
	}
	
	function updateTabSelection(tabOrder)
	{
			jQuery('.TipsTabs .ui-tabs-nav a').eq(tabOrder - 1).click();		
	}

	function updateAJAXTabContent(tabContent, ajaxUrl, selectTab)
	{
		if (selectTab)
			jQuery('.TipsTabs .ui-tabs-nav a').filter('a[href$=' + tabContent.attr('id') + ']').click();
		
		var ajaxPagination = tabContent.find('.pagination');
		ajaxPagination.css('visibility', 'hidden');
		
		jQuery
			.ajax({
					url: ajaxUrl,
					success: function(html)
								{
									var htmlResponse = html;
									tabContent
										.fadeOut('fast', 
												 function()
												 {
														jQuery(this)
															.html(html)
															.fadeIn('fast');
															
														//jQuery('html,body').animate({scrollTop: jQuery('body').offset().top}, 1000);
														initAJAXTipsPagination();
														var ajaxPagination = tabContent.find('.pagination');
														ajaxPagination.css('visibility', 'visible');
														initVoteModules(tabContent);
												});
								}
				});
	}
	
// party theme voting
	function initThemeVoteModules()
	{		
		var voteLinks = jQuery('.PartyPlan a.ThemeVoteButton');
		voteLinks.each(function()
				{
					var voteLink = jQuery(this);
					activateThemeVoteLink(voteLink);
				})
	}

	function activateThemeVoteLink(vLink)
	{
		vLink
			.unbind('click')
			.click(function()
					{
						var vlnk = jQuery(this);
						saveThemeVote(vlnk);
						return false;
					})
	}

	function saveThemeVote(vLink)
	{
		var voteLink = vLink;
		voteLink.addClass('ThemeVoteButtonPending');
		
		var d = new Date();
		var ajaxUrl = new String(voteLink.attr('href'));
		ajaxUrl = ajaxUrl.replace('.html', '/' + d.getTime() + '.html') // custom caching for code igniter
		
		hideThemeVoteDynamicControls();
		
		jQuery
			.ajax({
				url: ajaxUrl,
				success: function(json)
					{
						var serverResponse = eval('(' + json + ')');
						if(serverResponse)
						{
							if(parseInt(serverResponse.AddLinkEnabled) == 0)
							{
								var recWrapper = voteLink.parents('.ThemeMainInfo:first');
								var voteMsgArea = recWrapper.find('.ThemeVoteMessageArea');
								
								if(serverResponse.Status == 'added')
								{
									recWrapper.find('a.ThemeVoteButton[rel=delete]').css('display', 'block');
									jQuery('.PartyPlan a.ThemeVoteButton[rel=add]').css('display', 'none');
									jQuery('.PartyPlan .ThemeVoteMessageArea').empty();
									recWrapper.find('.ThemeVoteMessageArea')
										.html('<div class="ThemeVoteMessage"><span class="ThemeVoteMessageStatus">' + serverResponse.Message + '</span><br />' + 
										      'Click <a href="your_party_plan.html">here</a> to view your party plan.</div>');
								}
								if(serverResponse.Status == 'deleted')
								{
									recWrapper.find('a.ThemeVoteButton[rel=delete]').css('display', 'none');
									jQuery('.PartyPlan a.ThemeVoteButton[rel=add]').css('display', 'block');
									jQuery('.PartyPlan .ThemeVoteMessageArea').empty();
									recWrapper.find('.ThemeVoteMessageArea')
										.html('<div class="ThemeVoteMessage"><span class="ThemeVoteMessageStatus">' + serverResponse.Message + '</span></div>');
								}
							}
							showThemeVoteDynamicControls();
						}
					},
				error: function(err)
						{
							voteLink.removeClass('ThemeVoteButtonPending');
							showThemeVoteDynamicControls();
						}
					
			  })
	}
	
	function hideThemeVoteDynamicControls()
	{
		jQuery('.PartyPlan').find('.ThemeVoteMessageArea, .ThemeVoteControls').css('visibility', 'hidden');
	}
	
	function showThemeVoteDynamicControls()
	{
		jQuery('.PartyPlan').find('.ThemeVoteMessageArea, .ThemeVoteControls').css('visibility', 'visible');
	}
	

// tabbed content
function initTabs()
{
	jQuery(".TipsTabs>ul li").each(function(index){jQuery(this).attr('index', index)});
	var tabSelection = jQuery(".TipsTabs>ul li.selected").attr('index');
	jQuery(".TipsTabs>ul")
		.tabs({
				load: function(event, ui)
						{
							var selectedPanel = jQuery(ui.panel);
							initVoteModules(selectedPanel);
							initAJAXTipsPagination(selectedPanel);
						},
				show: function(event, ui)
					{
						var tabLinkSel = jQuery(".TipsTabs>ul li.selected a");
						var selectedPanel = jQuery(ui.panel);
						if(tabLinkSel.attr('href') == '#' + selectedPanel.attr('id'))
							{
								initVoteModules(selectedPanel);
								initAJAXTipsPagination(selectedPanel);
							}
					},
				cache: false,
				selected: tabSelection
			  });
}

function initPartyPlanGallery()
{
	var PartyPlanGalleryWrapper = jQuery('#PartyPlanGalleryWrapper');
	var PartyPlanGalleryNav = jQuery('#PartyPlanGalleryNav');
	
	PartyPlanGalleryNav.find('li.inactive img').css('opacity', 0.1);
	
	PartyPlanGalleryNav.find('li a')
		.click(function()
			{
				var lnk = jQuery(this);
				PartyPlanGalleryNav.find('a').removeClass('activeSlide');
				lnk.addClass('activeSlide');
				
				var activeSlide = jQuery('#PartyPlanGalleryWrapper ul.PartyPlanGallery li.active');
				var newSlide = jQuery(lnk.attr('href'));
				
				if((activeSlide.size() > 0) && (newSlide.size() > 0))
				{
					activeSlide
						.stop()
						.fadeTo(100, 0.1, function()
									{
										activeSlide.css('display', 'none').removeClass('active');
										newSlide
											.css({
												display: 'block'
											     })
												.fadeTo(800, 1)
											     .addClass('active')
												.find('.OptionContent').jScrollPane();
									});
				return false;

				}
				else
				{
					newSlide
						.css({
							opacity: 0.1,
							display: 'block'
						     })
							.stop()
							.fadeTo(800, 1)
						     .addClass('active').find('.OptionContent').jScrollPane();
				}
			})
		
	PartyPlanGalleryNav.find('li a:first').click();
}

function initDisplayHelpers()
{
	jQuery('.MessageOverlayMask').css('opacity', 0.8)
}

function initFieldCounters() // requires cs.library.js
{
	var tipForm = jQuery('form[name=SubmitTip]');
	if(tipForm.size() > 0)
		tipForm.find('input[name=Title], textarea[name=Tip]').count()
}

jQuery(function(){
	initDisplayHelpers();
	initMainNav();	
	initTabs();
	initThemeVoteModules();
	initAJAXTipsPagination();
	replaceSubmitButtons();
	initPopupFormOverlays();
	resizeVerticalElements(jQuery('.SearchResults ul li'));
	initExpandableItems();
	initPartyPlanGallery();
	initFieldCounters();
	initSNLinks();
	
	// temp
	jQuery('ul.TipsFromKellyList a.lnkViewDetails').click(function(){alert('content needed for full story page'); return false})

})