var _defaultBlockOpts = {message: null, overlayCSS: {backgroundColor: '#fff'}};
var _clientPostalCode;
var _orderFormHasBeenSubmited

$(function(){

	$('#priceA').data('price', 35);
	$('#priceB').data('price', 50);
	$('#priceC').data('price', 90);
	
	$("#cpf").mask("999.999.999-99");
	$("#cep").mask("99999-999");
	$("#phone").mask("(99) 9999-9999");
	
	if($.browser.msie)
	{ 
		$('button').click(function(){
			$(this).parents('form').submit();
		});
	}
	
	
	$('#anonymous').click(function(){
		var msg = $(this).parent().find('h2');
		
		if($(this).is(':checked')) msg.fadeIn();
		else msg.fadeOut();
			
	});
	

	var states = '<option value="0">Selecione</option>';
	states += '<option value="ac">Acre</option><option value="al">Alagoas</option><option value="ap">Amapá</option>';
	states += '<option value="am">Amazonas</option><option value="ba">Bahia</option><option value="ce">Ceará</option>';
	states += '<option value="df">Distrito Federal</option><option value="es">Espírito Santo</option><option value="go">Goiás</option>';
	states += '<option value="ma">Maranhão</option><option value="ms">Mato Grosso do Sul</option><option value="mt">Mato Grosso</option>';
	states += '<option value="mg">Minas Gerais</option><option value="pa">Pará</option><option value="pb">Paraíba</option>';
	states += '<option value="pr">Paraná</option><option value="pe">Pernambuco</option><option value="pi">Piauí</option>';
	states += '<option value="rj">Rio de Janeiro</option><option value="rn">Rio Grande do Norte</option><option value="rs">Rio Grande do Sul</option>';
	states += '<option value="ro">Rondônia</option><option value="rr">Roraima</option><option value="sc">Santa Catarina</option>';
	states += '<option value="sp">São Paulo</option><option value="se">Sergipe</option><option value="to">Tocantins</option>';
	
	
	$('#state').append(states);
		
	$('.tag').click(function(){
		$('.tag').removeClass('active');
		$(this).addClass('active');
		
		$('#price').val($(this).data('price'));
		
		if($('#order-form-box:hidden').length)
		{
			$('#payment-modes-box').hide();
			$('#choose-price').hide();
			$('#my-gift').hide();
			$('#type-your-cpf').fadeIn();
			$('#cpf').focus();
			
			if($(window).height() < 500) animateAnchor('buy-anchor');
		}
		
		$(this).parent().css({height: '105px'});
		$(this).parent().find('h6').fadeIn();
		
	});
	
	
	$('#my-gift form').submit(function(){
		var input = $(this).find('.code');
		var errorBox = $(this).parent().find('.form-error');
		
		errorBox.hide();
		
		if(input.val().search(/[a-zA-Z]{6}/) == -1)
		{
			errorBox.fadeIn();
			return false;
		}
		
		$.post('/order/reveal', {code: input.val()}, function(response){
			if(response.error)
			{
				alert('Desculpe, mas o código informado não corresponde a um presente.\n\nPor favor, verifique letra por letra e tente novamente.');
				input.select();
				return false;
			}
			
			var box = $('#reveal-box');
			var from = box.find('h3');
			var message = box.find('h4');
			
			if(!response.anonymous)
			{
				from.html('Olá, ' + response.to + '!<br><br><span style="font-size: 15px">Quem enviou este presente a você foi <span style="text-decoration: underline">' + response.from + '</span>.</span>');
			}
			else
			{
				from.html('Oops! A pessoa que enviou o seu presente prefere não se identificar.');
			}
			
			if(response.message)
			{
				message.html('<span style="font-style: italic"><span style="font-size: 25px; font-weight: bold;">&#8220;</span>' + response.message + '<span style="font-size: 25px; font-weight: bold;">&#8221;</span></span>');
			}
			else
			{
				message.html('').hide();
			}
			
			$('#my-gift').hide();
			
			box.fadeIn();
			
		}, 'json');
		
		return false;
	});
	
	
	$('#cpf-form').submit(function(){
		$(this).find('.form-error').hide();
		var cpfField = $('#cpf');
		
		if(!isValidCpf(cpfField.val()))
		{
			$(this).find('.form-error').fadeIn();
			cpfField.focus();
			return false;
		}
		
		
		var typeYourCPfBox = $('#type-your-cpf');
		var tagsBox = $('#tags-box');
		var orderFormBox = $('#order-form-box');
		
		typeYourCPfBox.block(_defaultBlockOpts);		
		tagsBox.block(_defaultBlockOpts);
		
		$.post('/user/info', {cpf: cpfToNumbers(cpfField.val())}, function(response){
			
			typeYourCPfBox.unblock();		
			tagsBox.unblock();
			
			if(response.error)
			{
				alert(response.error);
				return;
			}
			
			typeYourCPfBox.hide();
			orderFormBox.find('form.step-1').show();
			orderFormBox.fadeIn();
			
			var nameField = $('#name');
			var emailField = $('#email');
			var emailMatchField = $('#email-match');
			var phoneField = $('#phone');
			
			orderFormBox.find('input').val('');
						
			if(response.data)
			{
				response = response.data;
				
				nameField.val(response.name);
				emailField.val(response.email);
				emailMatchField.val(response.email);
				phoneField.val(response.phone);
				
				if(response.postal_code) _clientPostalCode = response.postal_code;
			}
			else
			{
				nameField.focus();
			}
		
		}, 'json');
		
		return false;
	});
	
	
	$('#order-form-box form.step-1').submit(function(){
		var nameField = $('#name');
		var emailField = $('#email');
		var emailMatchField = $('#email-match');
		var phoneField = $('#phone');
		
		if(		nameField.val().length < 7 || 
				!emailField.val().length ||
				!emailMatchField.val().length ||
				phoneField.val().length !=14 ||
				phoneField.val().indexOf('_') != -1
		)
		{
			formError($(this), 'Todos os campos são obrigatórios.');
			return false;
		}
		
		if(!isValidEmail(emailField.val()) || !isValidEmail(emailMatchField.val()))
		{
			formError($(this), 'Verifique possíveis erros no(s) campo(s) de email.');
			return false;
		} 
		
		if(emailField.val() != emailMatchField.val())
		{
			formError($(this), 'Os emails digitados precisam ser iguais.');
			return false;
		}
		
		var digit = phoneField.val().substr(5, 1); 
		
		if(digit == '9' || digit == '8' || digit == '7')
		{
			formError($(this), 'O telefone não pode ser celular, rádio nem VOIP.');
			return false;
		}
		
		$(this).hide();
		
		$('#order-form-box form.step-2').fadeIn();
		
		return false;
	});
	
	
	$('#order-form-box form.step-2 a.yes, #to-other-header a.change').click(function(){
		giftIsToMe();		
		return false;
	});
	
	$('#order-form-box form.step-2 a.no, #to-me-header a.change').click(function(){
		giftIsToOther();
		return false;
	});
	
	
	
	$('#order-form-box form.step-3').submit(function(){
		
		if(_orderFormHasBeenSubmited === true) return false;

		var isGiftToMe = $('#is-this-gift-to-me').val() == '1' ? true : false;
		
		var nameField = $('#name');
		var emailField = $('#email');
		var cpfField = $('#cpf');
		var phoneField = $('#phone');
		var toNameField = $('#to-name');
		var addressField = $('#address');
		var neighborhoodField = $('#neighborhood');
		var stateField = $('#state');
		var postalCodeField = $('#cep');
		var anonymousField = $('#anonymous');
		var messageField = $('#message');
		var cityField = $('#city');
		
		
		if(!isGiftToMe)
		{
			if(toNameField.val().length < 7)
			{
				formError($(this), 'Informe o nome completo de quem vai receber o presente.');
				toNameField.focus();
				return false;
			}
		}
		
		if(addressField.val().length < 8)
		{
			formError($(this), 'O endereço para entrega parece estar incorreto. Digite número e complemento, e não use abreviações.');
			addressField.focus();
			return false;
		}
		
		if(addressField.val().search(/([0-9])/) == -1)
		{
			formError($(this), 'Digite o número da residência. Importante: lembre-se de incluir o complemento (apto., casa, lote, ...) se necessário.');
			addressField.focus();
			return false;
		}
		
		
		if(neighborhoodField.val().length < 3)
		{
			formError($(this), 'O campo bairro precisa ser informado corretamente.');
			neighborhoodField.focus();
			return false;
		}
		
		if(cityField.val().length < 3)
		{
			formError($(this), 'Informe o nome da cidade para entrega.');
			cityField.focus();
			return false;
		}
		
		if(stateField.val() == '0')
		{
			formError($(this), 'Selecione o estado para entrega.');
			stateField.focus();
			return false;
		}
		
		if(postalCodeField.val().search(/([0-9]{5}\-[0-9]{3})/) == -1)
		{
			formError($(this), 'Informe o CEP de entrega corretamente.');
			postalCodeField.focus();
			return false;
		}
		
		if(!$('#i-agree-chk:checked').length)
		{
			formError($(this), 'Para comprar você precisa ler e concordar com os termos de uso da Loja Surpresa. Marque esta opção acima após ler os termos.');
			return false;
		}

		var pagseguroLoader = $('#pagseguro-loader');
		pagseguroLoader.fadeIn();
		
		hideAllSteps();
		$('#gift-content').hide();
		window.scrollTo(0,0);
		
		var html = '<form id="pagseguro-order-form" target="_self" action="https://pagseguro.uol.com.br/security/webpagamentos/webpagto.aspx" method="post">';
		html += '<input type="hidden" name="email_cobranca" value="atendimento@lojasurpresa.com.br">';
		html += '<input type="hidden" name="tipo" value="CP">';
		html += '<input type="hidden" name="moeda" value="BRL">';
		html += '<input type="hidden" name="item_id_1" value="1">';
		html += '<input type="hidden" name="item_descr_1" value="">';
		html += '<input type="hidden" name="item_quant_1" value="1">';
		html += '<input type="hidden" name="item_valor_1" value="">';
		html += '<input type="hidden" name="item_frete_1" value="000">';
		html += '<input type="hidden" name="cliente_nome" value="">';
		html += '<input type="hidden" name="cliente_pais" value="BRA">';
		html += '<input type="hidden" name="encoding" value="utf-8">';
		html += '<input type="hidden" name="cliente_email" value="">';
		html += '<input type="hidden" name="cliente_ddd" value="">';
		html += '<input type="hidden" name="cliente_tel" value="">';
		html += '<input type="hidden" name="cliente_cep" value="">';
		html += '<input type="hidden" name="ref_transacao" value="">';
		//html += '<input type="hidden" name="submit" value="https://pagseguro.uol.com.br/Security/Imagens/btnfinalizaBR.jpg">';
		html += '</form>';
		
		$('body').append(html);
		
		var pagseguroForm = $('#pagseguro-order-form');
		
		pagseguroForm.find("input[name='item_valor_1']").val($('#price').val() + '00');
		pagseguroForm.find("input[name='item_descr_1']").val('Presente surpresa no valor de R$' + $('#price').val());
		pagseguroForm.find("input[name='cliente_nome']").val(nameField.val());
		pagseguroForm.find("input[name='cliente_email']").val(emailField.val());
		pagseguroForm.find("input[name='cliente_ddd']").val(phoneField.val().substr(1,2));
		pagseguroForm.find("input[name='cliente_tel']").val(phoneField.val().substr(5, 9).replace('\-', ''));
		if(_clientPostalCode) pagseguroForm.find("input[name='cliente_cep']").val(_clientPostalCode.replace('\-', ''));
		
		
		var postData = {};
		//cliente
		postData.name = nameField.val();
		postData.email = emailField.val();
		postData.cpf = cpfToNumbers(cpfField.val());
		postData.phone = phoneField.val();
		
		//pedido
		postData.address = addressField.val();
		postData.neighborhood = neighborhoodField.val();
		postData.city = cityField.val();
		postData.state = stateField.val();
		postData.postal_code = postalCodeField.val();
		postData.anonymous = anonymousField.is(':checked') ? 1 : 0;
		postData.message = isGiftToMe ? '' : messageField.val();
		postData.to_name = toNameField.val();
		
		//itens pedido
		postData.price = $('#price').val();
		
		// muito importante!
		_orderFormHasBeenSubmited = true;
		
		$.post('/user/checkout', postData, function(response){
			if(response.error)
			{
				pagseguroLoader.hide();
				alert('Oops! Não foi possível concluir o seu pedido.\nEstamos recebendo muitas requisições em nosso site no momento.\n\nVocê pode tentar novamente dentro de alguns minutos.\nSe preferir, entre em contato conosco informando o problema.\n\n\nDesde já agradecemos sua compreensão.');
				location.href = '/';
				return false;
			}
			
			pagseguroForm.find("input[name='ref_transacao']").val(response.id);
			pagseguroForm.submit();

		},'json');
		
		
		return false;
	
	});
});

function formError(formObj, message)
{
	formObj.find('.form-error')
				.hide()
				.html(message)
				.fadeIn();
	return false;
}

function hideFormError()
{
	$('form .form-error').hide();
}

function hideAllSteps()
{
	$('#order-form-box form.step-1, #order-form-box form.step-2, #order-form-box form.step-3').hide();
}

function showStep3()
{
	$('#order-form-box form.step-3').fadeIn();
}

function giftIsToMe()
{
	$('#is-this-gift-to-me').val('1');		
	hideAllSteps();
	
	$('#to-name').val($('#name').val());
	
	$('#to-other-header, #tr-to-name, #tr-anonymous, #tr-message').hide();
	$('#to-me-header').show();
	
	showStep3();
	hideFormError();
	$('#address').focus();
}

function giftIsToOther()
{
	$('#is-this-gift-to-me').val('0');
	hideAllSteps();
	
	$('#to-name').val('');
	
	$('#to-other-header, #tr-to-name, #tr-anonymous, #tr-message').show();
	$('#to-me-header').hide();
	
	showStep3();
	hideFormError();
	$('#to-name').focus();
}

function cpfToNumbers(cpf)
{
	return cpf.replace(/\-/g, '').replace(/\./g, '');
}

function isValidCpf(cpf)
{
	cpf = cpfToNumbers(cpf); 
	
	var numeros, digitos, soma, i, resultado, digitos_iguais;
	
	digitos_iguais = 1;
	
	if (cpf.length != 11)
	      return false;
	
	for (i = 0; i < cpf.length - 1; i++)
		if (cpf.charAt(i) != cpf.charAt(i + 1))
		{
			digitos_iguais = 0;
			break;
		}
	
	if (!digitos_iguais)
	{
		numeros = cpf.substring(0,9);
		digitos = cpf.substring(9);
		soma = 0;
		for (i = 10; i > 1; i--)
			soma += numeros.charAt(10 - i) * i;
		
		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
		
		if (resultado != digitos.charAt(0)) return false;
		
		numeros = cpf.substring(0,10);
		soma = 0;
		
		for (i = 11; i > 1; i--)
		      soma += numeros.charAt(11 - i) * i;
		
		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
		
		if (resultado != digitos.charAt(1)) return false;
			
		return true;
	}
	else return false;
}

function isValidEmail(email){
	var regex = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
	
	if(regex.test(email))	return true;
	return false;
}

function animateAnchor(anchor) {
    
    var uri = "#" + anchor;
    
    anchor = $('#' + anchor);    
    var destination = anchor.offset().top;    

    $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1100 );
    
    setTimeout(function()
    {
        window.location.href = uri;
    },500);

    return false;
};