$(document).ready(function() {
	
	(function() {
	  var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
	  po.src = 'https://apis.google.com/js/plusone.js';
	  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
	})();
	
	window.___gcfg = {lang: 'pt-BR'};
	
	browserCSSAdjustments();

	mainMenuResize();
	
	if ($('.rightContainer').length > 0) { rightContainerResize();}
	
	// Link Saravah
	if ($('#linkSaravah').length > 0) { bottomLinksReposition($('#linkSaravah')); }
	
	// Link Saravah
	if ($('#linkLojistas').length > 0) { bottomLinksReposition($('#linkLojistas')); }
	
	$('a:not(.adminLink, .inactive, .normalLink, #custom-tweet-a, #custom-facebook-a, #blogHeadlineContent a)').each(function() {
		if ( // Prevent Ajax For Links Inside Blog Headlines
			(($(this).closest('p')).length > 0) &&
			(($(this).closest('.blogMainWrapper')).length > 0)
		) {
			$(this).attr('target', '_blank');
		} else if ( // Prevent Ajax For Links Inside Blog Secondary Headlines
			(($(this).closest('p')).length > 0) &&
			(($(this).closest('.blogSecondaryHeadlineWrapper')).length > 0)
		) {
			$(this).attr('target', '_blank');
		} else if ( // Prevent Ajax For Links Inside Previous Post Bar Paragraphs
			(($(this).closest('p')).length > 0) &&
			(($(this).closest('.postsAnterioresPost')).length > 0)
		) {
			$(this).attr('target', '_blank');
		} else {
			var currentHref = $(this).attr('href');
			$(this).attr('href', '#' + currentHref);
		};
	});
	
	// Close All Widgets on Link
	$('a:not(.adminLink, .inactive, .normalLink, #custom-tweet-a, #custom-facebook-a)').live('click', function() {
		ajaxBuscaWrapperFadeAndClose();
		socialMediaFadeAndClose();	
	});
	
	// Disable Inactive Links
	$('a.inactive').live('click', function() {
		return false;
	})
	
	// Ajax History
	$(window).bind( "hashchange", function(e) {
		var link_url = $.param.fragment();
		
		if ((base_url.indexOf('beta')) >= 0) {
			var link_url = link_url.substring(6); // removes Slash from first character
		} else {
			var link_url = link_url.substring(1); // removes Slash + 'beta' from first character
		};
		
		if (link_url.length != 0) {			
			// Hacks for IE8-		
			if ($.browser.msie && ($.browser.version < 9.0)) {
				if ((link_url.indexOf('eventos') >= 0)) {
					window.location = base_url + link_url;
					// console.log(url);
				};

				if ((link_url.indexOf('filmes') >= 0)) {
					window.location = base_url + 'filmes/index/false';
					// console.log(newLocation);
				};
			} // Hacks for IE8-
			
			url = base_url + link_url + "/true";

			$('.pageContent').load(url, function() {
				_gaq.push(['_trackPageview', url]);
			});
		}		
	});
	
	// Since the event is only triggered when the hash changes, we need
	// to trigger the event now, to handle the hash the page may have
	// loaded with.
	$(window).trigger( "hashchange" );
	
	
	//////////////////////////////// Ajax Search
	$('#searchForm').submit(function() {
		var inputVal = $('#searchInput').val();
		searchQuery = inputVal.replace(/\s+/g, '_').toLowerCase();		
		
		var currentLocation = window.location;
		var locationBeforeHash = currentLocation.toString().split('#');
		
		var newLocation = locationBeforeHash[0] + '#/posts/busca/' + base_mall + '/' + searchQuery;
		
		ajaxBuscaWrapperFadeAndClose();
		window.location = newLocation;
		
		return false;
	});
	
	$('#searchInput').keyup(function(e) {
		if ((e.keyCode != 27)) { // If user hit Esc Key don't search
			
			if ((e.keyCode == 13)) { // Enter Key (Submit Form) Erases Current Search Widget
				ajaxBuscaWrapperFadeAndClose();
				$('input').blur();
				return false;
			}
			
			// Cleans Previous Search Layout
			$('#ajaxBuscaWrapper').remove();

			// Treats the Query
			var searchQuery = $(this).val();
			if (searchQuery == '') {
				return;
			};

			searchQuery = searchQuery.replace(/\s+/g, '_').toLowerCase();

			// Posts Search
			$.ajax({
				type: 'POST',
				url: base_url + 'posts/ajaxbusca/' + base_mall + '/' + searchQuery,
				data: $(this).serialize(),
				invokedata: $(this),
				error: function(data){
					// ajaxflash('Não foi possível criar este post');
					// preventDoubleSubmit('off');				
				},
				success: function(data) {
					// Makes sure previous search wrappers are indeed removed
					$('#ajaxBuscaWrapper').remove();			

					// Prints the New Search
					$('body').append(data);
				}
			});
			
			return false;
			
		};
	});
	
	$(document).keyup(function(e) {
	  if (e.keyCode == 27) { $('#buscaClose').click(); }   // esc
	});
	
	$('#buscaClose').live('click', function() {
		ajaxBuscaWrapperFadeAndClose();
	});
	
	function ajaxBuscaWrapperFadeAndClose() {
		var ajaxBuscaWrapper = $('#ajaxBuscaWrapper');
		ajaxBuscaWrapper.fadeOut(
			function() {
				ajaxBuscaWrapper.remove();
			}
		);
	};
	///// end Ajax Search
	
	// Store Category Search
	
	// Select Box		
	$('#lojasCategorias_container li').live('click', function() {
		var categoryId = $(this).attr('id');
		var categoryCode = categoryId.replace('lojasCategorias_input_', '');
		
		var currentLocation = window.location;
		var locationBeforeHash = currentLocation.toString().split('#');
		
		var newLocation = locationBeforeHash[0] + '#/lojas/category_index/' + base_mall + '/' + categoryCode;
		
		window.location = newLocation;
		
		return false;		
	});
	
	// Keyword Search
	$('.secondaryKeywordSearch').live('submit', function() {
		var inputVal = $('.storeSearchString').val();
		searchQuery = inputVal.replace(/\s+/g, '_').toLowerCase();		
				
		var currentLocation = window.location;
		var locationBeforeHash = currentLocation.toString().split('#');
		
		var newController = $(this).attr('id').replace('KeywordSearch', '');
		
		var newLocation = locationBeforeHash[0] + '#/' + newController + '/busca/' + base_mall + '/' + searchQuery;
		
		window.location = newLocation;
		
		return false;
	});
	
	//// Newsletter
	//// Temporary: Commented Until Further Functionalities are Available
	// $('.openCloseForm').live('click', function() {
	// 	if ($(this).hasClass('active')) {
	// 		$(this).siblings('form').slideUp('200');
	// 		$(this).removeClass('active');
	// 	} else {
	// 		$(this).siblings('form').slideDown('200');
	// 		$(this).addClass('active');
	// 	};
	// });
	
	// Validations
	$.validator.addMethod(
	    "brazilianDate",
	    function(value, element) {
	        return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
	    },
	    "Por favor insira uma data no formato dd/mm/aaaa"
	);
	
	jQuery.validator.addMethod("cpf", function(value, element) {
	   value = jQuery.trim(value);

		value = value.replace('.','');
		value = value.replace('.','');
		cpf = value.replace('-','');
		while(cpf.length < 11) cpf = "0"+ cpf;
		var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
		var a = [];
		var b = new Number;
		var c = 11;
		for (i=0; i<11; i++){
			a[i] = cpf.charAt(i);
			if (i < 9) b += (a[i] * --c);
		}
		if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
		b = 0;
		c = 11;
		for (y=0; y<10; y++) b += (a[y] * c--);
		if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }

		var retorno = true;
		if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) retorno = false;

		return this.optional(element) || retorno;

	}, "Informe um CPF válido."); // Mensagem padrão
	
	// Open Full Subscription Form
	$('#newsletterFullSubscriptionOptin').live('click', function() {
		if ($(this).is(':checked')) {
			// open the complete form
			$('#newsletterSubscribe').find('.hiddenFormWrapper').slideDown();
			$('#newsletterSubscribeEmailOnlyDiv').slideUp();
			
			if ( $('#newsletterSubscribeEmail1').val() != '') {
				$('#newsletterSubscribeEmail2').val( $('#newsletterSubscribeEmail1').val() );				
			}
			
			$('[name="data[clientEmail]"]').rules("remove");
			
			$('[name="data[clientEmailTwo]"]').rules("add", {
				required: true,
				email: true,
				messages: {
					required: "Não se esqueça de preencher seu email",
					email: "Digite um email válido"
				}
			});

			$('[name="data[clientEmailConfirm]"]').rules("add", {
				equalTo: "#newsletterSubscribeEmail2",
				messages: {
					equalTo: "Por favor digite seu email novamente"
				}
			});
			
			$('[name="data[clientCPF]"]').rules("add", {
				cpf: true
			});
			
			$('[name="data[clientName]"]').rules("add", {
				required: true,
				minlength: 2,
				maxlength: 128,
				messages: {
					required: "Não se esqueça de preencher seu nome",
					minlength: "Não se esqueça de preencher seu nome",
					maxlength: "Que nome longo você tem! É possível abreviar?"
				}
			});
			
			$('[name="data[clientBirthdayDay]"]').rules("add", {
				range: [1, 31],
				messages: {
					range: "Por favor digite um dia válido"
				}
			});
			
			$('[name="data[clientBirthdayMonth]"]').rules("add", {
				range: [1, 12],
				messages: {
					range: "Por favor digite um mês válido"
				}
			});
			
			$('[name="data[clientPhonePrefix]"]').rules("add", {
				minlength: 2,
				maxlength: 2,
	      number: true,
				messages: {
					minlength: "Não esqueça o DDD",
					maxlength: "Não esqueça o DDD",
					number: "Não esqueça o DDD"
				}
			});
			
			$('[name="data[clientPhoneSufix]"]').rules("add", {
				minlength: 8,
				maxlength: 8,
	      number: true,
				messages: {
					minlength: "Digite o número sem pontos ou traços",
					maxlength: "Digite o número sem pontos ou traços",
					number: "Digite o número sem pontos ou traços"
				}
			});					

		} else {
			// close the complete form
			$('#newsletterSubscribe').find('.hiddenFormWrapper').slideUp();			
			$('#newsletterSubscribeEmailOnlyDiv').slideDown();
			
			if ( $('#newsletterSubscribeEmail2').val() != '') {
				$('#newsletterSubscribeEmail1').val( $('#newsletterSubscribeEmail2').val() );				
			}

			// remove the validation from the complete form
			$('[name="data[clientEmailTwo]"]').rules("remove");
			$('[name="data[clientEmailConfirm]"]').rules("remove");
			$('[name="data[clientName]"]').rules("remove");
			$('[name="data[clientCPF]"]').rules("remove");
			$('[name="data[clientBirthdayDay]"]').rules("remove");
			$('[name="data[clientBirthdayMonth]"]').rules("remove");
			$('[name="data[clientPhonePrefix]"]').rules("remove");
			$('[name="data[clientPhoneSufix]"]').rules("remove");
			
			// add the email validation of the simple form
			$('[name="data[clientEmail]"]').rules("add", {
       	required: true,
	     	email: true,
				messages: {
					required: "Não se esqueça de preencher seu email",
					email: "Digite um email válido"
					}
				});
							
		};
	});
	
	// Submit Subscription Edit
	$('#newsletterSubscriptionEditSubmit').live('click', function() {
		var hiddenForm = $(this).closest('.grayBackground').find('.hiddenFormWrapper');
		if (hiddenForm.is(':visible')) {
		} else {
			$('#newsletterEditSubscription').find('.hiddenFormWrapper').slideDown();
		};
		return false;
	});
	
	// Submit New Subscription
	$('.newsletterSignup').live('submit', function() {
		$.post(base_url + 'newsletters/add/' + newsletter_mall, $('.newsletterSignup').serialize(),function(data) {
			$('#newsletterSubscribe').html(data);
		});
		return false;
	});
	
	// // Define Margins for Film Trailer Overlay Content
	// $('.filmTrailerContent').each(function() {
	// 	var iframeWidth = $(this).find('iframe').width();
	// 	var iframeHorizontalMargin = $(this).find('iframe').outerWidth(true);
	// 	var iframeHeight = $(this).find('iframe').height();
	// 	var iframeVerticalMargin = $(this).find('iframe').outerHeight(true);
	// 	
	// 	overlayWidth = iframeWidth + iframeHorizontalMargin;
	// 	overlayHeight = iframeHeight + iframeVerticalMargin;
	// 	
	// 	parentMarginLeft = (iframeWidth + iframeHorizontalMargin) / (-2);
	// 	parentMarginTop = ((iframeHeight + iframeVerticalMargin) / (-2) - 50);
	// 	$(this).css({
	// 		'margin-left': parentMarginLeft, 
	// 		'margin-top': parentMarginTop,
	// 		'width': overlayWidth,
	// 		'height': overlayHeight
	// 	});
	// });
	
	// Social Media Tab
	var facebookTab = $('#facebookTab');
	var twitterTab = $('#twitterTab');
	$('#socialMediaFacebook').click(function() {
		if (facebookTab.is(':hidden')) {
			twitterTab.fadeOut('fast',function(){
				facebookTab.fadeIn();
			});
		} else {
			facebookTab.fadeOut('fast');
		};
		return false;
	});
	
	$('#socialMediaTwitter').click(function() {
		if (twitterTab.is(':hidden')) {
			facebookTab.fadeOut('fast',function(){
				twitterTab.fadeIn();
			});
		} else {
			twitterTab.fadeOut('fast');
		};
		return false;
	});
	
	$('.socialMediaClose').click(function() {
		socialMediaFadeAndClose();	
	});
	
	function socialMediaFadeAndClose() {
		$('.socialMediaClose').parent().fadeOut('fast');
	};

}); // $(document).ready
	
//// Event Resize	
$(window).resize(function() {
	mainMenuResize();
		
	if ($('.rightContainer').length > 0) { rightContainerResize();}
	
	// Blog
	if ($('#linkPreviousPosts').length > 0) { indexAdminLinks();}
	
	if ($('#postsAnterioresWrapper').length > 0) {
		resizePreviousPostsWrapper();
	};
});

//// Event Scroll
$(window).scroll(function() {
	if ($('#rightContainerTopFixed').length > 0) { cinemaScroll(initializeCinemaPaddingTop);}
});

// CSS Adjustments
function browserCSSAdjustments() {
	if ($.browser.mozilla) { firefoxCSSAdjustments(); }
	
	$.browser.safari = ( $.browser.safari && /chrome/.test(navigator.userAgent.toLowerCase()) ) ? false : true;
	if ($.browser.safari) { safariCSSAdjustments(); }
	
	if ($.browser.msie) { ieCSSAdjustments(); }
	
	function firefoxCSSAdjustments() {
		
		var marginTopAdjustment = 1;
		adjustMainMenuSearchForm(marginTopAdjustment);
		
		var widthAdjustment = 60;
		// Adjust Store List Name Width
		var storeListName = $('.storeListName');
		var storeListNameOriginalWidth = parseFloat(storeListName.width());
		storeListName.width(storeListNameOriginalWidth + widthAdjustment);
		
		// Adjust Radio Song Padding
		var radioDisplay = $('#radioDisplay ')
		var originalPadding = parseFloat(radioDisplay.css('padding-top'));
		var newPadding = originalPadding - 1;
		
		radioDisplay.css({ 'padding-top' : newPadding });
	}
	
	function safariCSSAdjustments() {
		var marginTopAdjustment = 1;
		adjustMainMenuSearchForm(marginTopAdjustment);
	}
	
	function ieCSSAdjustments() {
		// Adjust Radio Song Padding
		var radioDisplay = $('#radioDisplay ')
		var originalPadding = parseFloat(radioDisplay.css('padding-top'));
		var newPadding = originalPadding - 1;
		
		if (parseInt($.browser.version, 10) == 8) {
			radioDisplay.css({ 'padding-top' : newPadding });
		} else {
		}
	}
	
	function adjustMainMenuSearchForm(marginTopAdjustment) { // Used on Firefox Mac, Safari Mac
		// Adjust Search Form Margin Top
		var searchForm = $('#searchForm');
		var searchFormOriginalMarginTop = parseFloat(searchForm.css('marginTop'));
		var searchFormNewMarginTop = searchFormOriginalMarginTop + marginTopAdjustment;
		searchForm.css('marginTop', searchFormNewMarginTop);
	}
}

// General
function updateBackgroundImage(imgName, mall) {	
	// mall can be either leblon or barra
	// it will be concatenated in the url
		
	// Set Default Image Name
	if (imgName == 'default') {
		imgName = 'background-general.jpg';
	};
		
	imgPath = base_url + 'img/general/background/' + mall + '/' + imgName;

	if ($('#backstretch').length > 0) {
		currentImgPath = $('#backstretch img').attr('src');
	} else {
		currentImgPath = '';
	};
	
	if (imgPath != currentImgPath) {
		$.backstretch(imgPath);
	};
		
}

function mainMenuResize() {
	
	if (!($.browser.msie)) {
		
		var screenWidth = $(window).width();
		var logoLink = $('header a#mainLogo')
		var logo = $('header a#mainLogo img');
		var logoWidth = parseFloat(logo.attr('width'));
		var logoLeftOffset = logoLink.offset().left;
		var logoRightMargin = parseFloat(logoLink.css('marginRight'));

		var mainMenu = $('#mainMenu');
		var mainMenuPadding = parseFloat(mainMenu.css('paddingLeft')) + parseFloat(mainMenu.css('paddingRight'));
		var mainMenuMinWidth = parseFloat(mainMenu.css('minWidth'));

		var mainMenuWidth = screenWidth - logoWidth - logoLeftOffset - logoRightMargin - mainMenuPadding - 20;

		if (mainMenuWidth > mainMenuMinWidth) {
			mainMenu.width(mainMenuWidth);

		} else {
			mainMenu.width(mainMenuMinWidth);
		};

		// Resize Search Form
		var mainMenuContentWidth = $('#mainMenu div:first').width();
		var searchForm = $('#searchForm');
		var searchFormWidth = searchForm.width();
		var searchFormInput = searchForm.children('input:first');
		var searchFormInputWidth = searchFormInput.width();
		var searchFormInputMaxWidth = 190;
		var searchFormInputMinWidth = 70;

		var searchFormTentativeWidth = mainMenuWidth - mainMenuContentWidth - 80;

		if (searchFormTentativeWidth <= searchFormInputMinWidth) {
			searchFormNewWidth = searchFormInputMinWidth;
		} else if (searchFormTentativeWidth >= searchFormInputMaxWidth) {
			searchFormNewWidth = searchFormInputMaxWidth;
		} else {
			searchFormNewWidth = searchFormTentativeWidth;
		}; 


	 	searchFormInput.width(searchFormNewWidth);
	}
};


function rightContainerResize() {
	var screenHeight = $(window).height();
	var screenWidth = $(window).width();
	
	var rC = $('.rightContainer');
	var rCLeftPosition = rC.offset().left;
	var rCTopPosition = rC.offset().top;
	var rCSidePadding = parseFloat(rC.css('paddingLeft')) + parseFloat(rC.css('paddingRight'));
	var rCVerticalPadding = parseFloat(rC.css('paddingTop')) + parseFloat(rC.css('paddingBottom'));
	
	rC.width(screenWidth - rCLeftPosition - rCSidePadding);
	rC.css('min-height', screenHeight - rCVerticalPadding);
}

// Form
function preventDoubleSubmit(action) {
	if (action == null) {
		setTimeout(
			function() {
				$('form').find('input, a').attr('disabled', 'disabled');
			}, 50);
	} else if(action == 'off') {
		$('form').find('input, a').removeAttr('disabled');
	}
}

// Admin Confirm Navigation
function adminConfirmNavigateAway() {
	$('.adminBar a:not(.entryDelete)').live('click', function() {
		if (!confirm("Sair desta página?")) {
			return false;
		};
	});
}

// Reposition Bottom Links
function bottomLinksReposition(link) {
	var linkOriginalHref = link.attr('href');
	
	$(document).ready(function() {
		bottomLinksFade(link, linkOriginalHref);
	});
	
	$(window).resize(function() {
		bottomLinksFade(link, linkOriginalHref);
	});
	
}

function bottomLinksFade(link, linkOriginalHref) {
	
	var linkOffsetTop = link.offset().top;

	var radio = $('.jp-audio');
	var radioOffsetTop = radio.offset().top;
	var radioHeight = radio.height();
	var radioOffsetBottom = radioOffsetTop + radioHeight;

	var heightDifference = linkOffsetTop - radioOffsetBottom;
	
	var newOpacity = heightDifference / 20;

	if (newOpacity > 1) {
		newOpacity = 1;
	} else if (newOpacity < 0) {
		newOpacity = 0;
	};

	if (newOpacity == 0) {
		var hrefAttr = '';
	} else {
		var hrefAttr = linkOriginalHref;
	};

	link.css({'opacity' : newOpacity}).attr('href', hrefAttr);
}
