// Módulo JS da Cesta de Compras <ricardo at jurid.com.br>

function retornaProdutoMidias(midias){
  if (midias.length <= 0) return false;
  
  for (i=0;i<midias.length;i++){
    var midia = midias[i].split("=");
  
    var divMidia = sprintf('<div class="ProdutosOptions"><label><input %s type="radio" name="tipoMidia" id="tipoMidia" value="%s" />%s</label></div>',
                           (i == 0)?"checked":"",
                           midia[0],
                           midia[1]
                          );   
    document.write(divMidia);    
  }
  return true;
}

function validaCartaoCredito(cardNumber, cardType){
    var isValid = false;
    var ccCheckRegExp = /[^\d ]/;
    isValid = !ccCheckRegExp.test(cardNumber);

    if (isValid){
      var cardNumbersOnly = cardNumber.replace(/ /g,"");
      var cardNumberLength = cardNumbersOnly.length;
      var lengthIsValid = false;
      var prefixIsValid = false;
	    var prefixRegExp;
    	
    	switch(cardType){
        case "mastercard":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^5[1-5]/;
        break;
        case "visa":
            lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
            prefixRegExp = /^4/;
        break;
        case "amex":
            lengthIsValid = (cardNumberLength == 15);
            prefixRegExp = /^3(4|7)/;
        break;
        default:
            prefixRegExp = /^$/;
            alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
    }
    if (isValid){
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;
        for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--){
            checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
            digitCounter--;
            numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
            for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++){
                checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
            }
        }
        isValid = (checkSumTotal % 10 == 0);
    }

    return isValid;
}

function verificaCesta(){
  var url = URL + "/cestadecompras";
  var resultado = enviaRequisicao(url, "a=verificaCesta", "POST", false);
  resultado = resultado.split("\r\n");
  return (retornavalor(resultado, "QTDE") > 0);
}

function retornaProdutosCesta(){
  if (!verificaCesta()) return false;

  var url = URL + "/cestadecompras";
  var resultado = enviaRequisicao(url, "a=retornaProdutosCesta", "POST", false);
	resultado = resultado.split("\r\n");
  
  return resultado;
}

function adicionaProdutoACesta(idproduto,idtipomidia,qtde){
  var url = URL + "/cestadecompras";
  var params = "a=adicionaACesta&idproduto=" + idproduto + "&idtipomidia=" + idtipomidia + "&qtde=" + qtde;
  
  var resultado = enviaRequisicao(url, params, "POST", false);
  resultado = resultado.split("\r\n");
    
  return (retornavalor(resultado, "ERRO") == 0);
}

function removeProdutoDaCesta(idproduto){
  var url = URL + "/cestadecompras";
  var params = "a=removeProdutoDaCesta&idproduto=" + idproduto;
  
  var resultado = enviaRequisicao(url, params, "POST", false);
  resultado = resultado.split("\r\n");
  resultado = (retornavalor(resultado, "ERRO") == 0);
  
  if (resultado){
    if (!verificaCesta()){
      window.location = URL + "/cestadecomprasvazia";
      } else {
      window.location = URL + "/cestadecompras";
    }
    return TRUE;
  }
  
  return resultado;
}

function recalcularCesta(){
  var itensCesta = retornaProdutosCesta();
  
  for(i=0;i<itensCesta.length;i++){
    if (itensCesta[i] != ""){
      item = itensCesta[i].split('[#]');
      var qt = document.getElementById('item_' + parseInt(item[2]));
      adicionaProdutoACesta(parseInt(item[2]), parseInt(item[0]), parseInt(qt.value));
    }
  }
  
  window.location.reload(true);
}

function calculaTotalCompra(parcelas){
  var url = URL + "/cestadecompras";
  var params = "a=calculaTotalCompra&parcelas=" + parcelas;
  
  var resultado = enviaRequisicao(url, params, "POST", false);
  resultado = resultado.split("\r\n");
  var onde = document.getElementById("valorTotalCompra");
  onde.innerHTML = "R$ " + retornavalor(resultado, "TOTAL");
  
  return (retornavalor(resultado, "ERRO") == 0);
}

function finalizarCompra(){
  var _formapagto = pegaValorRadioEx('rbFormaPagto');
  var _parcelas = null;
  var _dados = null;
    
  switch (_formapagto){
    // visa
    case "1":
      _parcelas = pegaValorRadioEx('parcelaVisa');
      _cartao = document.getElementById('numeroVisa');
      _nome = document.getElementById('nomeVisa');
      _mes = document.getElementById('mesVisa');
      _ano = document.getElementById('anoVisa');
      _cod = document.getElementById('segVisa');
      _dados = ";nome=" + _nome.value + ";numero=" + _cartao.value + ";mes=" + _mes.value + ";ano=" + _ano.value + ";cod=" + _cod.value + ";bandeira=visa";
      
      if (_cod.value == ""){
      	alert('Por favor, digite o código de segurança contido em seu cartão VISA.');
      	_cod.focus();
      	return false;
      }
      
      if (!validaCartaoCredito(_cartao.value, 'visa')){
      	alert('Por favor, digite o número do seu cartão VISA corretamente!');
      	_cartao.focus();
      	return false;
      }
      break;
    // boleto
    case "2":
      _parcelas = 1;
      _dados = "";
      break;
    // depósito
    case "3":
      _parcelas = 1;
      _dados = "";
      break;
    // amex
    case "6":
      _parcelas = pegaValorRadioEx('parcelaAmex');
      _cartao = document.getElementById('numeroAmex');
      _nome = document.getElementById('nomeAmex');
      _mes = document.getElementById('mesAmex');
      _ano = document.getElementById('anoAmex');
      _cod = document.getElementById('segAmex');
      _dados = ";nome=" + _nome.value + ";numero=" + _cartao.value + ";mes=" + _mes.value + ";ano=" + _ano.value + ";cod=" + _cod.value + ";bandeira=amex";

      if (_cod.value == ""){
      	alert('Por favor, digite o código de segurança contido em seu cartão AMEX.');
      	_cod.focus();
      	return false;
      }
      
      if (!validaCartaoCredito(_cartao.value, 'amex')){
      	alert('Por favor, digite o número do seu cartão AMEX corretamente!');
      	_cartao.focus();
      	return false;
      }

      break;
    // mastercard
    case "7":
      _parcelas = pegaValorRadioEx('parcelaMastercard');
      _cartao = document.getElementById('numeroMastercard');
      _nome = document.getElementById('nomeMastercard');
      _mes = document.getElementById('mesMastercard');
      _ano = document.getElementById('anoMastercard');
      _cod = document.getElementById('segMastercard');
      _dados = ";nome=" + _nome.value + ";numero=" + _cartao.value + ";mes=" + _mes.value + ";ano=" + _ano.value + ";cod=" + _cod.value + ";bandeira=mastercard";

      if (_cod.value == ""){
      	alert('Por favor, digite o código de segurança contido em seu cartão MASTERCARD.');
      	_cod.focus();
      	return false;
      }
      
      if (!validaCartaoCredito(_cartao.value, 'mastercard')){
      	alert('Por favor, digite o número do seu cartão MASTERCARD corretamente!');
      	_cartao.focus();
      	return false;
      }

      break;    	
    default:
      alert("Por favor, selecione uma forma de pagamento e preencha os campos necessários para concluir sua compra.");
      exit;
      break; 
  }
  
  if ((_parcelas == null)||(_dados == null)){
    alert("Por favor, verifique se todos os campos obrigatórios estão devidamente selecionados e tente novamente.");
    exit;
  }
  var url = URL + "/cestadecompras";
  var params = "a=efetivaCompra&idformapagto=" + _formapagto + "&parcelas=" + _parcelas + "&dados=" + _dados;
  var resultado = enviaRequisicao(url, params, "POST", false);
  resultado = resultado.split("\r\n");

	window.location = URL + "/" + retornavalor(resultado, "PAGINARETORNO");
	return true;
}
