/**
 * Salva os dados de um campo.
 */
function save(field) {
	var t_ = '';
	var c_ = field.attr('name');
	var v_ = field.val();
	if (field.hasClass('cliente')) {
		t_ = 'CL';
	} else if (field.hasClass('contato')) {
		t_ = 'CO';
	} else if (field.hasClass('endereco')) {
		t_ = 'EN';
	} else if (field.hasClass('assinatura')) {
		t_ = 'AS';
	} else if (field.hasClass('pagamento')) {
		t_ = 'PA';
	} else if (field.hasClass('banco')) {
		t_ = 'BA';
	} else if (field.hasClass('cartao')) {
		t_ = 'CA';
	}
	if (c_.match(/^dt_nascimento/gi)) {
		c_ = '';
		var nd_ = $('[name=dt_nascimento_dia]').val();
		var nm_ = $('[name=dt_nascimento_mes]').val();
		var na_ = $('[name=dt_nascimento_ano]').val();
		if (nd_ != '' && nm_ != '' && na_ != '') {
			c_ = 'dt_nascimento';
			v_ = na_ + '-' + nm_ + '-' + nd_;
		}
	} else if (c_.match(/^nr_cep/gi)) {
		var sfx = c_.match(/final/i) ? '_final' : '';
		c_ = '';
		var c1_ = $('[name=nr_cep1' + sfx + ']').val();
		var c2_ = $('[name=nr_cep2' + sfx + ']').val();
		if (c1_ != '' && c2_ != '') {
			c_ = 'nr_cep' + sfx;
			v_ = c1_ + c2_;
		}
	} else if (c_.match(/^nr_(fone|ddd)/gi)) {
    var tipo = c_.match(/fone/i) ? 'fone' : '';
    tipo = c_.match(/ddd/i) ? 'ddd' : tipo;
    var sfx = c_.match(/pres/i) ? '_pres' : '';
    c_ = 'nr_' + tipo + '_'  + $('[name=tipo_tel' +  sfx + ']').val() + sfx;
  }
	if (field.attr('type') == 'checkbox') {
		v_ = field.attr('checked') == 'checked' ? v_ : '';
	}
	if (c_ != '') {
    if(c_.match(/^tipo_tel/gi)) {
      var sfx = c_.match(/pres/i) ? '_pres' : '';
      if (check($('[name=nr_fone' + sfx +']'))) {
        $.post('ajax/save.php', {t: 'CO', c: 'nr_fone_' + v_ + sfx, v: $('[name=nr_fone' + sfx + ']').val()});
      }
      if (check($('[name=nr_ddd]'))) {
        $.post('ajax/save.php', {t: 'CO', c: 'nr_ddd_' + v_ + sfx, v: $('[name=nr_ddd' + sfx +']').val()});
      }
    } else if (t_ != '') {
      $.post('ajax/save.php', {t : t_, c : c_ ,v : v_});
    }
  }
}

/**
 * Checa o valor de um campo.
 */
function check(field) {
	var v_ = field.val();
	var n_ = field.attr('name');
	if (n_ == 'nr_cpf_cnpj') {
		field.removeClass('cpf');
		field.removeClass('cnpj');
		if (v_.length == 11) {
			field.addClass('cpf');
		} else if (v_.length == 14) {
			field.addClass('cnpj');
		}
	}
	if (field.hasClass('cnpj')) {
		return isCNPJ(v_);
	} else if (field.hasClass('cpf')) {
		return isCPF(v_);
	} else if (field.hasClass('email')) {
		return isEmail(v_);
	} else if (field.hasClass('numero')) {
		return v_.match(/^[0-9]*$/gi);
	} else if (field.hasClass('vazio')) {
		return v_.length > 0;
	} else if (field.hasClass('dia')) {
		v_ = parseInt(v_, 10);
		return v_ >= 1 && v_ <= 31;
	} else if (field.hasClass('mes')) {
		v_ = parseInt(v_, 10);
		return v_ >= 1 && v_ <= 12;
	} else if (field.hasClass('ano')) {
		v_ = parseInt(v_, 10);
		var y = (new Date()).getFullYear();
		return v_ >= (y - 90) && v_ <= (y - 18);
	} else if (field.hasClass('nome')) {
		return v_.match(/\S{3,} .*?\S{3,}/gi);
	} else if (field.hasClass('cep')) {
		var rgx = new RegExp('\\d{' + field.attr('maxlength') + '}', 'gi');
		return v_.match(rgx);
	} else if (field.hasClass('ddd')) {
		v_ = parseInt(v_, 10);
		return v_ >= 11 && v_ <= 99;
	} else if (field.hasClass('fone')) {
		return v_.match(/^[2-9][0-9]{7}$/gi);
	} else if (field.hasClass('cartao')) {
		return isCreditCard(v_);
	} else {
		// Não necessita nehuma validação.
		return true;
	}
}


function getPageSizes() {
  var xs = document.documentElement.offsetWidth;
  var ww = document.documentElement.clientWidth;
//  var ys = document.documentElement.offsetHeight;
  var wh = document.documentElement.clientHeight;
  var ph = $(document).height();
  var pw = xs < ww ? xs : ww;
  if (ph <= $(document)) {
    window.alert();
  }
  settings = {
    pageW: pw,
    pageH: ph,
    windowW: ww,
    windowH: wh,
    scrollX: document.documentElement.scrollLeft,
    scrollY: document.documentElement.scrollTop
  };
  return settings;
}


/**
 * Checa se um CNPJ é válido.
 */
function isCNPJ(cnpj) {
	if (cnpj.length != 14) {
		return false;
	}
	var c = new Array(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2);
	var soma = 0;
	for (var i = 0; i < 12; i++) {
		soma += (cnpj.charAt(i) * c[i + 1]);
	}
	var dv1 = soma % 11;
	if (dv1 < 2) {
		dv1 = 0;
	} else {
		dv1 = 11 - dv1;
	}
	soma = 0;
	for (var i = 0; i < 13; i++) {
		soma += (cnpj.charAt(i) * c[i]);
	}
	var dv2 = soma % 11;
	if (dv2 < 2) {
		dv2 = 0;
	} else {
		dv2 = 11 - dv2;
	}
	return (dv1 == cnpj.charAt(12)) && (dv2 == cnpj.charAt(13));
}

/**
 * Checa se um CPF é válido.
 */
function isCPF(cpf) {
	if (cpf.length != 11) {
		return false;
	}
	var repeat = '';
	for (var i = 0; i < 11; i++) {
		repeat += cpf.charAt(0);
	}
	if (cpf == repeat) {
		return false;
	}
	var soma = 0;
	for (var i = 0; i < 9; i++) {
		soma += (cpf.charAt(i) * (i + 1));
	}
	var dv1 = soma % 11;
	if (dv1 == 10) {
		dv1 = 0;
	}
	soma = 0;
	for (var i = 1; i < 10; i++) {
		soma += (cpf.charAt(i) * i);
	}
	var dv2 = soma % 11;
	if (dv2 == 10) {
		dv2 = 0;
	}
	return (dv1 == cpf.charAt(9)) && (dv2 == cpf.charAt(10));
}

/**
 * Checa se um e-mail é válido.
 */
function isEmail(email) {
	var rgx1 = /(\@.*\@)|(.*\.\..*)|(.*\@\..*)|(^\.)|(\.$)|(\@\/)|(.*\@\-.*)|(.*\.$)/gi;
	var rgx2 = /^[_\w\d][\w\d\_\/\-\.]*\@[\d\w\-\.]+[0-9A-z]$/gi;
	var rgx3 = /.*\@.*\.+.*/gi;
	return !email.match(rgx1) && email.match(rgx2) && email.match(rgx3);
}

/**
 * Checa se um número de cartão de crédito é válido.
 */
function isCreditCard(ccNumber) {
	var digits = '';
	var number = ccNumber;
	var digitPosRight = 0;
	for (var ccDigit = 1; ccDigit <= number.length; ccDigit++) {
		digitPosRight++;
		var digitPos = number.length - ccDigit;
		digits = (digitPosRight % 2 == 0)
				? ((number.charAt(digitPos) / 1) * 2) + digits
				: number.charAt(digitPos) + digits;
	}
	digitPosRight = 0;
	for (var ccDigit = 0; ccDigit < digits.length; ccDigit++) {
		digitPosRight += (digits.charAt(ccDigit) / 1);
	}
	return digitPosRight % 10 == 0 || (number.length == 15 && (number.substr(0, 4) == '2014' || number.substr(0, 4) == '2149'));
}

/**
 * Redireciona para uma URL.
 */
function redirect(url) {
	window.location.href = url;
}

function _forma(campo){
  if (campo.val() == 1) {
    $('#forma_2').addClass('inativo');
    $('#forma_1').removeClass('inativo');
  } else if (campo.val() == 2) {
    $('#forma_2').removeClass('inativo');
    $('#forma_1').addClass('inativo');
  } else {
    $('#forma_2').addClass('inativo');
    $('#forma_1').addClass('inativo');
  }
}

function _finalsemana(campo){
  if (campo.val() == 'S') {
    $('#final').removeClass('inativo');
  } else {
    $('#final').addClass('inativo');
  }
}

function _presente(campo){
  if (campo.val() == 'S') {
    $('#pres').removeClass('inativo');
  } else {
    $('#pres').addClass('inativo');
  }
}

function _endereco(campo){
  var sfx = '';
  if (campo.attr('class').match('(^| )final( |$)')) {
    var sfx = '_final';
  }
  var cep1 = $('#nr_cep1' + sfx);
  var cep2 = $('#nr_cep2' + sfx);
  if (check(cep1) && check(cep2)) {
    var cep_ = cep1.val() + cep2.val();
    $.getJSON('ajax/cep.php', { cep: cep_ }, function(data){
      var end = data.end;
      if (typeof end.uf == 'undefined') {
        window.alert('O CEP informado não foi encontrado.');
      } else {
        $('#sl_uf' + sfx).val(end.uf).change();
        $('#no_cidade' + sfx).val(end.cidade).change();
        $('#no_bairro' + sfx).val(end.bairro).change();
        $('#no_logradouro' + sfx).val(end.endereco).change();
        $('#nr_numero' + sfx).focus();
      }
    });
  } else {
    window.alert('O CEP deve ser preenchido.');
  }
}

function _opcao(){
  var grupo = $('[name=sl_uf] option:selected').attr('class');
  var v = $('[name=sl_uf] option:selected').val();
  var a = $('.grupo:not(.inativo)').attr('id');
  var i = 'grupo_' + grupo;
  if (a != '' && a != i) {
    if (v != '' && typeof v != 'undefined') {
      $('.tipo_ass').removeClass('inativo');
      $('.grupo, .tipo').addClass('inativo');
      $('.grupo :radio, .tipo :radio').attr('checked', false).change();
      if ($('#' + i).length > 0) {
        $('#' + i).removeClass('inativo');
        $('#' + i + ' ul :first-child input').attr('checked', true).change();
      } else {
        $('.tipo_ass').removeClass('inativo');
        $('.tipo_ass').append('<div id="' + i + '" class="grupo"><p>' +
        '<strong class="importante">Este tipo de assinatura não é válido para a sua localidade.</strong><br />' +
        'Entre em contato pelos telefones abaixo:<br />' +
        '3950-9000 (São Paulo e Grande São Paulo)<br />' +
        '0800 014 9000 (Demais localidades)</p></div>');
      }
    } else {
      $('#' + a).addClass('inativo');
      $('.tipo_ass').addClass('inativo');
      $('#' + a + ' :checked').attr('checked', false).change();
    }
  }
}
function _tipo(campo){
  if (campo.val().match(/.4/) && campo.attr('checked') == true) {
    $('.end_fim_semana').removeClass('inativo');
  } else {
    $('.end_fim_semana').addClass('inativo');
  }
  if (campo.attr('checked') == true) {
    var a = $('.tipo:not(.inativo)').attr('id');
    $('.tipo_ass, .parc_escolhido').removeClass('inativo');
    var i = 'tipo_' + campo.val();
    if (a != i) {
      $('.tipo').addClass('inativo');
      $('#' + i).removeClass('inativo');
      $('.tipo :radio').attr('checked', false).change();
    }
  } else {
    $('#' + a).attr('checked', false).change();
    $('.tipo_ass, .parc_escolhido').addClass('inativo');
  }
}
