<repo_name>raivitor/papudinho<file_sep>/www/js/Ctrl_Home.js
app.controller('Home', ['$scope', '$http', '$ionicModal', '$ionicPopup','$rootScope','$window','$location','Geolocalizacao', function($scope, $http, $ionicModal, $ionicPopup, $rootScope,$window,$location,Geolocalizacao) {
  window.localStorage['login'] = 1;


function getGpS(){
  //Localizacao do GPS
    navigator.geolocation.getCurrentPosition(function(position) {
      window.localStorage['latitude'] = position.coords.latitude;
      window.localStorage['longitude'] = position.coords.longitude;
      console.log(position.coords.latitude, position.coords.longitude)
      Geolocalizacao.UpdateGps();
    }, function(error) {
        console.log('Erro ao pegar localização: ' + error.message);
    });//{ timeout: 60000 });

}

  function timedCount() {
    getGpS()
    document.getElementsByClassName("title").innerHTML = "teste";
    var time;
    if(window.localStorage['login'] == 1){
      //clearTimeout(time);
      $http({
        url: servidor+'/webservice/cards/due_date', 
        method: "GET",
        params: {
          user: G_usuario.id
        }
      }).

      success(function (data, status, headers, config) {
        console.log(data)
        $scope.CartoesVencimento = data;
        if(data == 0){
          $scope.msg = "Nenhum clube a expirar";
        }
        else{
          $scope.msg = "Clubes a expirar";
        }
      }).

      error(function (data, status, headers, config) {
        console.log('Error home');
      });

      return 0;
    }
    else{
      time = setTimeout(function(){ timedCount() }, 2000);
    }
  }

  timedCount();



  $scope.checkin = function(bar){
    $http({
    url: servidor+'/webservice/check_in', 
    method: "POST",
    params: {
      bar_id: bar,
      user_id: G_usuario.id
    }
  }).

  success(function (data, status, headers, config) {
    $scope.closeModal(1);
    alerta($ionicPopup, "Check-in", "Check-in realizado com sucesso!");
  }).

  error(function (data, status, headers, config) {
    $scope.closeModal(1);
    alerta($ionicPopup, "Check-in", "Erro ao realizar Check-in, tente novamente.");
    console.error('Checkin');
  });
  }

//convide
 $scope.convideAmigo = function() {
    console.log('amigo')
     window.plugins.socialsharing.share('Estou usando o WhiskYou Clube do Whisky, vamos tomar uma?!');
     $scope.closeModal(2);
 };

 $scope.convideApp = function() {
    console.log('app')
     window.plugins.socialsharing.share('Baixe o app na GOOGLE PLAY (http://urele.com/WhiskYou-Android) ou na APP STORE (http://urele.com/WhiskYou-IOS) e entre para o maior clube de apreciadores de Whisky do mundo =D');
     $scope.closeModal(2);
 };


  $scope.sugerir = function() {
    console.log('sugeir')
    $scope.closeModal(2)
    $scope.closeModal(1)
    $location.path("/addBar");
     //$window.location.href = '/#/addBar';
 };



// Modal 1
    $ionicModal.fromTemplateUrl('my-modal.html', {
      id: '1', // We need to use and ID to identify the modal that is firing the event!
      scope: $scope,
      backdropClickToClose: false,
      animation: 'slide-in-up'
    }).then(function(modal) {
      $scope.oModal1 = modal;
    });

    // Modal 2
    $ionicModal.fromTemplateUrl('shared-modal.html', {
      id: '2', // We need to use and ID to identify the modal that is firing the event!
      scope: $scope,
      backdropClickToClose: false,
      animation: 'slide-in-up'
    }).then(function(modal) {
      $scope.oModal2 = modal;
    });

    $scope.openModal = function(index) {
      if (index == 1) $scope.oModal1.show();
      else $scope.oModal2.show();
    };

    $scope.closeModal = function(index) {
      if (index == 1) $scope.oModal1.hide();
      else $scope.oModal2.hide();
    };

    /* Listen for broadcasted messages */

    $scope.$on('modal.shown', function(event, modal) {
        console.log('Modal ' + modal.id + ' is shown!');



    navigator.geolocation.getCurrentPosition(function(position) {
     
        window.localStorage['latitude'] = position.coords.latitude;
        window.localStorage['longitude'] = position.coords.longitude;
        console.log(position.coords.latitude, position.coords.longitude)
      


        console.log(window.localStorage['latitude'],window.localStorage['longitude'])
        $http({
          url: servidor+'/webservice/get_near_bars', 
          method: "GET",
          params: {
            latitude: window.localStorage['latitude'],
            longitude: window.localStorage['longitude']
          }
        }).

        success(function (data, status, headers, config) {
          $scope.Bares = data;
        }).

        error(function (data, status, headers, config) {
          console.log('Error bares');
        });
      
    }, function(error) {
        alert("Erro ao obter lista de bares...")
        console.log('Erro ao pegar localização: ' + error.message);
    });


        

    });

    $scope.$on('modal.hidden', function(event, modal) {
      console.log('Modal ' + modal.id + ' is hidden!');
    });

    // Cleanup the modals when we're done with them (i.e: state change)
    // Angular will broadcast a $destroy event just before tearing down a scope 
    // and removing the scope from its parent.
    $scope.$on('$destroy', function() {
      console.log('Destroying modals...');
      $scope.oModal1.remove();
      $scope.oModal2.remove();
    });


}]);<file_sep>/www/js/Ctrl_Amigos.js
app.controller('Amigos', ['$scope', '$ionicModal', '$ionicPopup', 'Amizade', function($scope, $ionicModal, $ionicPopup, Amizade) {
  var amigos;
  $scope.countpush =  false;
  $scope.solicitacoes;
  $scope.solPen = 0; //Quantidade de solicitacoes pendentes

  //console.log(G_usuario.id);
  //G_usuario.id = 7; //msn
  //G_usuario.id = 13; //gmail
  ListarAmigos();

  ListarSolicitacoes();

  $scope.doRefresh = function(){
    $scope.msg = ""
    ListarAmigos();
    ListarSolicitacoes();
    $scope.$broadcast('scroll.refreshComplete');
  }

  function ListarAmigos(){
  
    Amizade.getAllAmigos(G_usuario.id).then(function(_amigos){
      $scope.Amigos = _amigos;
      if($scope.Amigos != -1){
        if($scope.Amigos.length == 0 ){
          $scope.msg = "Você ainda não tem amigos, clique no + para adicionar novos amigos";
        }
      }
      console.log($scope.Amigos);
    });
    
  }

  function ListarSolicitacoes(){
    Amizade.getAllSolicitacoes(G_usuario.id).then(function(_solicitacoes){
      $scope.solicitacoes = _solicitacoes;
      $scope.solPen = $scope.solicitacoes.length;
      console.log($scope.solicitacoes);
    });
  }

  $scope.aceitar = function(idSolicitacao){
    $scope.countpush = true;
    $scope.msg = ""
    console.log(idSolicitacao);
    Amizade.AceitarAmizade(idSolicitacao);
    ListarAmigos();
    ListarSolicitacoes();
    $scope.$digest();
  }

  $scope.deletar = function(idSolicitacao, nome) {
    var confirmPopup = $ionicPopup.confirm({
      title: 'Cancelar solicitação',
      template: 'Deseja excluir a amizade de '+nome+' ?',
      cancelText: 'Manter',
      cancelType: 'button-positive',
      okText: 'Excluir',
      okType: 'button-assertive'
    });
    confirmPopup.then(function(res) {
      if(res) {
        Amizade.RecusarAmizade(idSolicitacao);
        ListarAmigos();
        ListarSolicitacoes();
      }
    });
   };

  $ionicModal.fromTemplateUrl('modal-amigos.html', {
    scope: $scope,
    animation: 'slide-in-up'
  }).then(function(modal) {
    $scope.modal = modal;
  });
  $scope.openModal = function(id) {
    $scope.modal.show();
  };
  $scope.closeModal = function() {
    $scope.countpush = true;
    $scope.modal.hide();
  };
  //Cleanup the modal when we're done with it!
  $scope.$on('$destroy', function() {
    $scope.modal.remove();
  });
  // Execute action on hide modal
  $scope.$on('modal.hidden', function() {
    // Execute action
  });
  // Execute action on remove modal
  $scope.$on('modal.removed', function() {
    // Execute action
  });

}]);<file_sep>/www/js/Ctrl_UpdateCartao.js
app.controller('UpdateCartao', ['$scope', '$http', '$location', '$ionicPopup', 'CartoesPessoais', '$stateParams', '$ionicScrollDelegate', '$ionicModal', function($scope, $http, $location, $ionicPopup, CartoesPessoais, $stateParams, $ionicScrollDelegate, $ionicModal) {
  

  console.log($stateParams.cartaoId);
  
  var fotoCard = 0;
  var fotoDrink = 0;

  var req = {
    method: 'GET',
    url: servidor+'/webservice/cards/'+$stateParams.cartaoId,
  }
  $http(req).
    then(function (sucesso) {
      console.log(sucesso);
      $scope.cartao = sucesso.data[0];
      $scope.id = $stateParams.cartaoId;
      $scope.bar = sucesso.data[0].bar;
      $scope.drink = sucesso.data[0].drink;
      
      $scope.historico = sucesso.data[0].historics;

      $scope.doses = $scope.historico[0].remaining_doses;
      $scope.imgDrink = $scope.historico[0].image_drink.url;
      $scope.imgCard = $scope.historico[0].image_card.url; 

      return sucesso;
    },
    function(fail){
      console.error("fail getCartoes - id"+id);
      return -1;
    });


  $ionicModal.fromTemplateUrl('modal-ft.html', {
    scope: $scope,
    animation: 'slide-in-up'
  }).then(function(modal) {
    $scope.modal = modal;
  });

  $scope.ChangeRange = function(val){
    $scope.doses = parseInt($scope.doses) + parseInt(val);
    if($scope.doses <= 0)
      $scope.doses = 0;
    if($scope.doses >= 20)
      $scope.doses = 20;
  }
  
  $scope.openModal = function(id) {
    if(id == 1){
      $scope.titulo = "Bebida";
      $scope.img = $scope.imgDrink;
    }
    else if (id == 2){
      $scope.titulo = "Cartão";
      $scope.img = $scope.imgCard;
    }
    $scope.modal.show();
  };
  $scope.closeModal = function() {
    $scope.modal.hide();
  };
  //Cleanup the modal when we're done with it!
  $scope.$on('$destroy', function() {
    $scope.modal.remove();
  });
  // Execute action on hide modal
  $scope.$on('modal.hidden', function() {
    // Execute action
  });
  // Execute action on remove modal
  $scope.$on('modal.removed', function() {
    // Execute action
  });

  $scope.capturePhoto = function(id) {
    if(id == 1)
      navigator.camera.getPicture(onSuccess, onFail, { quality: 30, destinationType: Camera.DestinationType.DATA_URL });
    else if(id == 2)
      navigator.camera.getPicture(onSuccess2, onFail2, { quality: 30, destinationType: Camera.DestinationType.DATA_URL });
  }

  function onSuccess(imageData) {
    fotoDrink = imageData;
    $scope.imgDrink = "data:image/jpeg;base64," + fotoDrink;
    $scope.$digest();
  }

  function onFail(message) {
    fotoDrink = 0;
  }

  function onSuccess2(imageData) {
    fotoCard = imageData;
    $scope.imgCard = "data:image/jpeg;base64," + fotoCard;
    $scope.$digest();
  }

  function onFail2(message) {
    fotoCard = 0;
  }

  $scope.submitcartao = function() {
    if(fotoDrink == 0){
      alerta($ionicPopup, "Notificação", "Tire uma foto da bebida para continuar.");
      return 0;
    }

    if(fotoCard == 0){
      alerta($ionicPopup, "Notificação", "Tire uma foto do cartão para continuar.");
      return 0;
    }
    $scope.checked = true;
    $ionicScrollDelegate.scrollTop();
    var req = {
      method: 'POST',
      url: servidor+'/webservice/update_card',
      data: { 
        card_id: $scope.id,
        remaining_doses : $scope.doses,
        image_card: $scope.imgCard,
        image_drink: $scope.imgDrink
      }
    }
console.log(req);
    $http(req).then(function(data){
      $scope.checked = false;
      CartoesPessoais.atualizar(G_usuario.id);
      $scope.bebida = null;
      $scope.bar = null;
      fotoCard = 0;
      fotoDrink = 0;
      $scope.imgCard = null;
      $scope.imgDrink = null;
      $scope.msg = " ";
      alerta($ionicPopup, "Notificação", "Cartão atualizado com sucesso!");
      $location.path('/menu/meuscartoes'); 
    }, function(data){
      $scope.checked = false;
      alerta($ionicPopup, "Notificação", "Erro ao atualizar o cartão, tente novamente.");
      console.error(data); 
    });
    return 0; 
  }

  $scope.$on('updatecartao', function() {
    $scope.submitcartao();
  })
}]);

app.controller('FooterUpdateCartao', ['$scope', '$rootScope',  function($scope, $rootScope) {
  $scope.click1 = function () {
      $rootScope.$broadcast('updatecartao');
  }
}]);<file_sep>/www/js/papuchat.js
/*
v.0.0.1
Toda alteração que for comitada deve gerar um nova versão desde arquivo
  .. log de alterações...
*/


function generateUUID(){
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
    .replace(/[xy]/g, function(c) {var r = Math.random()*16|0,v=c=='x'?r:r&0x3|0x8;return v.toString(16);});
}

var Papuchat = {
  ref: new Firebase('https://chat-prot.firebaseio.com')
};

Papuchat.isIncorret = function(message){
  var log = null
  if(!message.from_id)
    log = "Está faltando a chave from_id : Id de quem está enviado a mensagem.";
  if(!message.to_id)
    log = "Está faltando a chave to_id : Id de quem está recebendo a mensagem.";
  if(!message.from)
    log = "Está faltando a chave from : Nome de quem está enviando a mensagem.";
  if(!message.to)
    log = "Está faltando a chave to : Nome de quem está recebendo a mensagem.";
  if(!message.text)
    log = "Está faltando a chave text : texto da mensagem.";

  var stack = new Error(log).stack
  if(log) return console.error(stack);
   return false;
};

/* Iniciando uma conversa */
Papuchat.startChat = function(message){
  message.created_at =  new Date().toString();

  if(this.isIncorret(message)) return;

  var chatUUID = generateUUID();
  // Iniciador
  var fromUserRef = this.ref.child(message.from_id + "/" +chatUUID);
  fromUserRef.set(message);
  // recebedor
  var toUserRef = this.ref.child(message.to_id + "/" +chatUUID);
  toUserRef.set(message);

  var messagesRef = this.ref.child( "messages/" +chatUUID);
  messagesRef.push(message);

  sendPush(message.from, message.text, message.to_id);
};

function sendPush(name, message, to_id){
  var data = {
    name: name,
    message: message,
    to_id: to_id
  }

  //$.post('/webservice/chat/notification', data, function(){});
}

Papuchat.deleteChat = function(chatUUID, from_id, to_id){
  // Iniciador
  var fromUserRef = this.ref.child(from_id + "/" +chatUUID);
  fromUserRef.remove();
  // recebedor
  var toUserRef = this.ref.child(to_id + "/" +chatUUID);
  toUserRef.remove();

  var messagesRef = this.ref.child( "messages/" +chatUUID);
  messagesRef.remove();
};


Papuchat.getChats = function(userID, done){

  var userRef = this.ref.child(userID);

  userRef.on("value", function(snapshot){
    var results = [];
    snapshot.forEach(function(snap) {
      var data = snap.val();
      data.id = snap.key();
      results.push(data);
    });

    done(results);
  });
};

Papuchat.getMessages = function(chatUUID, done){
  var userRef = this.ref.child( "messages/" +chatUUID);

    userRef.endAt().limit(100).on("value", function(snapshot){
      var results = [];
      snapshot.forEach(function(snap) {
        var data = snap.val();
        data.id = snap.key();
        results.push(data);
      });

      done(results);
    });

};

Papuchat.send = function(chatUUID, message){
  if(this.isIncorret(message)) return;

  message.created_at =  new Date().toString();



  var toUserRef = this.ref.child(message.to_id + "/" +chatUUID);
  toUserRef.update(message);



  var fromUserRef = this.ref.child( message.from_id + "/" + chatUUID);
  fromUserRef.update(message);

  var messagesRef = this.ref.child( "messages/" +chatUUID);

  messagesRef.push(message);

  //sendPush(message.from, message.text, message.to_id);

  // Atualizando mensagens novas
  var newMessages = this.ref.child(message.to_id + "/" + chatUUID + "/news");
  newMessages.transaction(function (current_value) {
    return (current_value || 0) + 1;
  });
};

Papuchat.cleanNews = function(userID, chatUUID){
  var fromUserRef = this.ref.child( userID + "/" + chatUUID);
  fromUserRef.update({ news: 0 });
};


var directpush = {};

directpush.ref = new Firebase('https://chat-prot.firebaseio.com/directpush');

/* Envia uma notificação direta para um cliente. */
directpush.push = function(id, message){
  var ref = this.ref.child(id);
  ref.push(message);
};

/* Registrar callback para toda vez que um mensagem dicionada disparar ele. */
directpush.on = function(id, done){
  var ref = this.ref.child(id);
  ref.on('child_added', function(dataSnapshot) {
     done(dataSnapshot.val());
  });
};

/* retorna todas as mensagens diretas do usuário. */
directpush.all = function(id, done){
  var ref = this.ref.child(id);

  ref.on("value", function(snapshot){
    var results = [];
    snapshot.forEach(function(snap) {
      results.push(snap.val());
    });
    done(results);
  });
};

/* Deletar mensagens */
directpush.clean = function(id, message){
  var ref = this.ref.child(id);
  ref.remove();
};
<file_sep>/www/js/Ctrl_NovaSenha.js
app.controller('NovaSenha', ['$scope', '$http', '$location', '$ionicPopup',  function($scope, $http, $location, $ionicPopup) {
  $scope.checked = false;
  $scope.submitsenha = function() {
    if($scope.email == undefined ){
      $scope.msg = "O campo 'Email' está vazio";
      return 0;
    } 
    $scope.checked = true;
    $http({
      url: servidor+'/webservice/reset_password/', 
      method: "POST",
      params: {
        email: $scope.email
      }
    }).

    success(function (data, status, headers, config) {
      $scope.checked = false;
      alerta($ionicPopup, "Notificação", "Enviamos a nova senha para o seu email.");
      $location.path('home');  
    }).

    error(function (data, status, headers, config) {
      $scope.checked = false;
      alerta($ionicPopup, "Notificação", "Erro ao enviar a nova senha, tente novamente mais tarde.");
      console.log('Error NovaSenha');
      console.log("Data: "+data);
      console.log("Status: "+status);
      console.log("headers: "+headers);
      console.log("Config: "+config);
    });
  }
}]);<file_sep>/www/js/Ctrl_AddBar.js
app.controller('AddBar', ['$scope', '$http', '$location', '$ionicPopup', function($scope, $http, $location, $ionicPopup) {
  $scope.name = "";
  $scope.phone = "";
  $scope.state = "";
  $scope.city = "";
  $scope.district = "";
  $scope.street = "";
  $scope.number = "";
  $scope.email = "";

  $scope.Gps = function(){
    GetLocation();

    $http({
      url: 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+window.localStorage['latitude']+','+window.localStorage['longitude']+'&sensor=true', 
      method: "GET"
    }).

    success(function (data, status, headers, config) {
      $scope.street = data.results[0].address_components[1].short_name;
      $scope.district = data.results[0].address_components[2].short_name;
      $scope.city = data.results[0].address_components[3].short_name;
      $scope.state = data.results[0].address_components[5].short_name;
    }).

    error(function (data, status, headers, config) {
      console.log(data);
    });
  }

  $scope.submitbar = function() {


    if($scope.name == "" || $scope.phone == "" || $scope.state == "" || $scope.city == "" || $scope.district == "" || $scope.street == "" || $scope.number == "" || $scope.email == "" ){
      alert("Preencha todos os dados")
      return false;
    }







    $scope.msg = "";
    
    GetLocation();
    // console.log("latitude: "+window.localStorage['latitude']);
    // console.log("longitude: "+window.localStorage['longitude']);

    if(window.localStorage['latitude'] == undefined){
      $scope.msg = "Ligue o GPS para termos uma localização precisa" ;  
      return 0;
    }

    if(window.localStorage['longitude'] == undefined){
      $scope.msg = "Ligue o GPS para termos uma localização precisa" ;  
      return 0;
    }

    $http({
      url: servidor+'/webservice/create_suggestion', 
      method: "POST",
      params: {
        name: $scope.name,
        phone: $scope.phone,
        state: $scope.state,
        city: $scope.city,
        district: $scope.district,
        street: $scope.street,
        number: $scope.number,
        latitude: window.localStorage['latitude'],
        longitude: window.localStorage['longitude'],
        email: $scope.email
      }
    }).

    success(function (data, status, headers, config) {
      alerta($ionicPopup, "Notificação", "Bar sugerido com sucesso!");
      $location.path('/menu/bares'); 
    }).

    error(function (data, status, headers, config) {
      console.log('Error add Bar: '+data);
    });

    return 0; 
  }
}]);<file_sep>/www/js/Service_Usuario.js
app.factory('Usuario', ['$http', function($http){
  var cartoes = 0;
  /**
  * -1: Erro de servidor
  *  1: Sucesso
  */

  function UpdateToken(idUser, tokenUser){
    if(cartoes == 0){
      var req = {
        method: 'POST',
        url: servidor+'/webservice/device_token',
        params:{
          id: idUser, 
          token: <PASSWORD>User
        }
      }
      $http(req).
        then(function (sucesso) {
          /*console.warn("Sucesso token");
          console.log(sucesso);*/
        },
        function(fail){
          console.error("Fail token");
          //console.log(fail);
        });
    }
  }

  return {
    UpdateToken: UpdateToken
  }
}]);<file_sep>/www/js/Ctrl_Sidebar.js
app.controller('Sidebar', ['$scope', '$state', '$http', '$location' ,function($scope, $state, $http,$location) {

    $scope.checked = true;
    $scope.nome = window.localStorage['nome'];
    console.log(window.localStorage['nome']);

  $scope.logoff = function() {

    var idUser = window.localStorage['user_id'];
    console.log(idUser)

    
    //alert(idUser)
    var req = {
        method: 'POST',
        url: servidor+'/webservice/device_token',
        params:{
          id: idUser, 
          token: "<PASSWORD>"
        }
      }
      $http(req).
        then(function (sucesso) {
          console.warn("Sucesso token");
          console.log(sucesso);
          localStorage.clear();
          $location.path('/login');
        },
        function(fail){
          console.error("Fail token");
          localStorage.clear();
          $location.path('/login');
          //console.log(fail);
        });



  }


  $scope.sair = function() {

  }
}]);

app.controller('Sobre', ['$scope', '$state', '$http', '$location' ,function($scope, $state, $http,$location) {


  $scope.teste = servidor.includes("teste");
  $scope.servidor = servidor;
   
}]);<file_sep>/www/js/Ctrl_Promocoes.js
app.controller('Promocoes', ['$scope', '$http',  function($scope, $http) {
  $scope.data = {};
  $scope.data.busca = "";
  $scope.FiltroTags = function(item) {
    var trecho = $scope.data.busca;
    var palavra = trecho.split(" ");
    cont = 0;
    for (var i = 0; i < palavra.length; i++) {
      if(item.description.toUpperCase().indexOf(palavra[i].toUpperCase()) != -1)
        cont++;
    };
    if(cont == palavra.length)
      return true;
    else 
      return false;
  };

  function Atualizar () {
    $http({
      url: servidor+'/webservice/promotions/', 
      method: "GET",
      params:{
          latitude: window.localStorage['latitude'],
          longitude: window.localStorage['longitude']
        }
    }).

    success(function (data, status, headers, config) {
      if(data == 0){
        $scope.msg = "Nenhuma promoção disponível no momento."
      } else {
        $scope.msg = "";
        $scope.Promocoes = data;
        console.log(data)
      }
    }).

    error(function (data, status, headers, config) {
      console.log('Error promocoes');
    });

    $scope.$broadcast('scroll.refreshComplete');
  }

  Atualizar();
  $scope.doRefresh = function() {


    navigator.geolocation.getCurrentPosition(function(position) {
      window.localStorage['latitude'] = position.coords.latitude;
      window.localStorage['longitude'] = position.coords.longitude;
      console.log(position.coords.latitude, position.coords.longitude)
      Atualizar();

    }, function(error) {
        console.log('Erro ao pegar localização: ' + error.message);
    });

    
  }
}]);<file_sep>/www/js/Ctrl_CartaoDetalhe.js
app.controller('CartaoDetalhe', ['$scope', 'CartoesPessoais', '$stateParams', '$ionicModal', function($scope, CartoesPessoais, $stateParams, $ionicModal) {
  console.log('aqui??')
  $scope.cartao = CartoesPessoais.getCartoes($stateParams.cartaoId);
  $scope.bar = $scope.cartao.bar;
  $scope.drink = $scope.cartao.drink;
  $scope.vencimento = $scope.cartao.due_date;
  $scope.total_doses = $scope.cartao.total_doses;
  $scope.historico = $scope.cartao.historics;
  $scope.detalhe = $scope.historico.getId($stateParams.histId);

  $ionicModal.fromTemplateUrl('modal-ft.html', {
    scope: $scope,
    animation: 'slide-in-up'
  }).then(function(modal) {
    $scope.modal = modal;
  });
  $scope.openModal = function(id) {
    if(id == 1){
      $scope.titulo = "Bebida";
      $scope.img = $scope.detalhe.image_drink.url;
    }
    else if (id == 2){
      $scope.titulo = "Cartão";
      $scope.img = $scope.detalhe.image_card.url;
    }
    $scope.modal.show();
  };
  $scope.closeModal = function() {
    $scope.modal.hide();
  };
  //Cleanup the modal when we're done with it!
  $scope.$on('$destroy', function() {
    $scope.modal.remove();
  });
  // Execute action on hide modal
  $scope.$on('modal.hidden', function() {
    // Execute action
  });
  // Execute action on remove modal
  $scope.$on('modal.removed', function() {
    // Execute action
  });
}]);<file_sep>/www/js/Ctrl_Dados.js
app.controller('dados', ['$scope', '$http', '$ionicPlatform', '$ionicPopup', '$interval', '$location', function($scope, $http, $ionicPlatform, $ionicPopup, $interval, $location) {
  $scope.email = G_usuario.email; 
  $scope.nome = G_usuario.name;
  //Força a atualização por causa do cache
  $interval(atualizar, 1000, false);

  function atualizar(){
    if(window.localStorage['atualizarDados'] == 1 ){
      console.log("dados atualizados");
      window.localStorage['atualizarDados'] = 0;
      $scope.email = G_usuario.email; 
      $scope.nome = G_usuario.name;
    }
  }

  $scope.submitDados = function() {
    //$location.path('/menu/home');
    //return 0;
    if($scope.passwordOld == undefined ){
      alerta($ionicPopup, "Notificação", "O campo 'Senha Antiga' está vazio");
      return 0;
    } 

    if($scope.passwordOld.length < 8 ){
      alerta($ionicPopup, "Notificação", "'Senha Antiga' precisa ter 8 ou mais dígitos");
      return 0;
    } 

    if($scope.password1 == undefined ){
      alerta($ionicPopup, "Notificação", "O campo 'Senha Nova' está vazio");
      return 0;
    } 

    if($scope.password2 == undefined ){
      alerta($ionicPopup, "Notificação", "O campo 'Confirmar Senha Nova' está vazio");
      return 0;
    } 
    
    if($scope.password1.length < 8 ){
      alerta($ionicPopup, "Notificação", "'Senha Nova' precisa ter 8 ou mais dígitos");
      return 0;
    }

    if($scope.password1 != $scope.password2){
      alerta($ionicPopup, "Notificação", "Senhas diferentes");
      return 0;
    }

    $http({
      url: servidor+'/webservice/change_password', 
      method: "POST",
      params: {
        id: G_usuario.id,
        old_password: $scope.passwordOld,
        new_password: $scope.password1
      }
    }).

    success(function (data, status, headers, config) {
      alerta($ionicPopup, "Notificação", "Senha alterada com sucesso!");
      $scope.password1 = '';
      $scope.passwordOld = '';
      $scope.password2 = '';
    }).

    error(function (data, status, headers, config) {
      alerta($ionicPopup, "Notificação", "Senha antiga está errada");
      console.log('Error add Amigo');
    });

    return 0; 
  }
}]);<file_sep>/release.sh
cordova build --release android
cp /Volumes/DEV/saites/papudinho/platforms/android/build/outputs/apk/android-release-unsigned.apk keys
cd keys
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore papudinho.keystore android-release-unsigned.apk papudinho
./zipalign -v 4 android-release-unsigned.apk Papudinho.apk
<file_sep>/www/js/app.js
// Ionic Starter App

// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
// 'starter.services' is found in services.js
// 'starter.controllers' is found in controllers.js
var app = angular.module('app', ['ionic', 'ngCordova', 'ngMask', 'firebase']);


var servidor = "http://teste-papudinho.herokuapp.com";
//var servidor = "http://sistema.whiskyouapp.com.br";

/*
window.addEventListener('getiduser', function(event) {
  directpush.on(event.detail, function(data){
    var event = new CustomEvent('directpush', { detail: data });
    window.dispatchEvent(event);
  })
});*/



app.run(function($ionicPlatform, $ionicHistory, $location, $ionicPopup, $http) {


  document.addEventListener("backbutton", onBackKeyDown, false);

  function onBackKeyDown() {
    //faz nada
  }

 /*
  window.addEventListener('directpush', function (e) {
    $ionicPopup.alert({
     title: e.detail.bar_name,
     template: e.detail.message
    });

    directpush.clean(localStorage.getItem('user_id'));
  }, false);*/

  $ionicPlatform.ready(function() {

    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);
      cordova.plugins.Keyboard.hideAccessoryBar(false);
    }

    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      //StatusBar.hide();
      //StatusBar.styleLightContent();
    }

    getAppVersion(function(version) {
        window.localStorage['version'] = version;
    });

/*
    ionic.Platform.fullScreen();
    if (window.StatusBar) {
      return StatusBar.hide();
    }
    */

    $ionicPlatform.registerBackButtonAction(function(e){
      str = window.location.href;
      if(str.indexOf("login") > 0){
        navigator.app.exitApp();
      }
      //else if(str.indexOf("meuscartoes") >= 0 || str.indexOf("amigos") >= 0 || str.indexOf("bares") >= 0 || str.indexOf("cartoes") >= 0 || str.indexOf("promocao") >= 0 || str.indexOf("dados") >= 0 || str.indexOf("config") >= 0){
        //$location.path('/menu/home');
      //}
      else{
        $ionicHistory.goBack();
        e.preventDefault();
      }
      return false;
    },501);

    /**
    * GetLocation() fica pegando a posição atual do usuario, a função está em funcoes.js
    */
    var localizacao = setInterval(GetLocation, G_tempo);

    var params = [fid, latitude, longitude, radius];
      DGGeofencing.startMonitoringRegion(params, function(result) {}, function(error) {
        //  alert("failed to add region");
      });

    //Localizacao do GPS
    navigator.geolocation.watchPosition(function(position) {
      window.localStorage['latitude'] = position.coords.latitude;
      window.localStorage['longitude'] = position.coords.longitude;
      console.log(position.coords.latitude, position.coords.longitude)
    }, function(error) {
        console.log('Erro ao pegar localização: ' + error.message);
    }, { timeout: 60000 });//{ timeout: 60000 });

  });


});

app.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
  $ionicConfigProvider.navBar.alignTitle("center");
  //$ionicConfigProvider.scrolling.jsScrolling(false);
  $ionicConfigProvider.views.transition("android");
  //$ionicConfigProvider.views.maxCache(0);
  $stateProvider

    .state('login', {
      cache: false,
      url: '/login',
      templateUrl: 'login'
    })

    .state('signup', {
      cache: false,
      url: '/signup',
      templateUrl: 'signup'
    })

    .state('senha', {
      cache: false,
      url: '/senha',
      templateUrl: 'senha'
    })

    .state('eventmenu', {
      url: "/menu",
      abstract: true,
      templateUrl: "sideMenu"
    })

    .state('eventmenu.home', {
      cache: false,
      url: "/home",
      views: {
        'menuContent' :{
          templateUrl: "home"
        }
      }
    })

    .state('eventmenu.barMensagem', {
      cache: false,
      url: "/barMensagem",
      views: {
        'menuContent' :{
          templateUrl: "barMensagem"
        }
      }
    })

    .state('eventmenu.meuscartoes', {
      url: "/meuscartoes",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "meuscartoes"
        }
      }
    })

    .state('eventmenu.cartoes', {
      url: "/cartoes",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "cartoes"
        }
      }
    })

    .state('eventmenu.promocao', {
      url: "/promocao",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "promocao"
        }
      }
    })

    .state('eventmenu.amigos', {
      cache: false,
      url: "/amigos",
      views: {
        'menuContent' :{
          templateUrl: "amigos"
        }
      }
    })

    .state('eventmenu.bares', {
      url: "/bares",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "bares"
        }
      }
    })

    .state('eventmenu.dados', {
      url: "/dados",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "dados"
        }
      }
    })

    .state('eventmenu.config', {
      url: "/config",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "config"
        }
      }
    })


    .state('eventmenu.sobre', {
      url: "/sobre",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "sobre"
        }
      }
    })

    .state('eventmenu.logoff', {
      url: "/logoff",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "logoff"
        }
      }
    })

    .state('eventmenu.bar', {
      url: "/barmsg",
      cache: false,
      views: {
        'menuContent' :{
          templateUrl: "barmsg"
        }
      }
    })


    .state('promocaoId', {
      url: '/promocao/:id',
      cache: false,
      templateUrl: 'promocao'
    })

    .state('bar', {
      url: '/bar/:id',
      cache: false,
      templateUrl: 'bar'
    })

    .state('addCartao', {
      cache: false,
      url: '/addCartao',
      templateUrl: 'addCartao'
    })

    .state('addAmigo', {
      url: '/addAmigo',
      cache: false,
      templateUrl: 'addAmigo'
    })

    .state('chat', {
      url: '/chat/:chatId/:nome/:relacionamento',
      cache: false,
      templateUrl: 'chat'
    })

    .state('chatUsuarios', {
      url: '/chat/:chatId/:nome',
      cache: false,
      templateUrl: 'chat'
    })

    .state('cartao', {
      url: '/cartao/:cartaoId',
      cache: false,
      templateUrl: 'cartao'
    })

    .state('updatecartao', {
      cache: false,
      url: '/updatecartao/:cartaoId',
      templateUrl: 'updatecartao'
    })

    .state('cartaodetalhe', {
      cache: false,
      url: '/cartaodetalhe/:cartaoId/:histId',
      templateUrl: 'cartaodetalhe'
    })


    .state('cartaoBarHistorico', {
      cache: false,
      url: '/cartaoBarHistorico/:cartaoId',
      templateUrl: 'views/cartao_historico.html'
    })

    .state('barmsg', {
      cache: false,
      url: '/barmsg',
      templateUrl: 'views/bar_msg.html'
    })

    .state('barmsgmessages', {
      cache: false,
      url: '/messages/:id',
      templateUrl: 'views/messages.html'
    })

    .state('addBar', {
      cache: false,
      url: '/addBar',
      templateUrl: 'addBar'
    })
    ;

  $urlRouterProvider.otherwise('/login');
});


/**
* Adicionando um novo método no objeto 'Array'
*/
Array.prototype.getId = function(id) {
    var i;
    for (i = 0; i < this.length; i++) {
      if(this[i].id == id)
        return this[i];
    }
    return 0;
}

var G_usuario = [];

/**
* Tempo de atualização da posição
    1m - 60,000ms
    5m - 300,000ms
    10m - 600,000ms
    15m - 900,000ms
*/
var G_tempo = 300000;

var G_bares = [];


document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    // Now safe to use device APIs
    initPushwoosh();
}

// chamando o initPushwoosh
app.run(function($ionicPopup){
  // userData.custom_data.name
  // userData.custom_data.message
  window.addEventListener('directpush', function (e) {
    $ionicPopup.alert({
      title: e.detail.name,
      template: e.detail.message
    });
  }, false);


});

  function initPushwoosh($ionicPopup){

    var deviceType = (navigator.userAgent.match(/iPad/i))  == "iPad" ? "iPad" : (navigator.userAgent.match(/iPhone/i))  == "iPhone" ? "iPhone" : (navigator.userAgent.match(/Android/i)) == "Android" ? "Android" : (navigator.userAgent.match(/BlackBerry/i)) == "BlackBerry" ? "BlackBerry" : "null";





  var pushNotification = cordova.require("pushwoosh-cordova-plugin.PushNotification");


  if(deviceType == "iPhone" || deviceType == "iPad"){
    //set push notification callback before we initialize the plugin
    document.addEventListener('push-notification', function(event) {
        var notification = event.notification;

        if(notification && notification.userdata){
          // caso seja promoçãp
          if(notification.userdata.custom_data.promotion_id){
            var id = notification.userdata.custom_data.promotion_id;
            window.open(servidor+'/promocao/'+id, '_blank', 'location=yes','closebuttoncaption=FECHAR');
          } else {
            console.log("CHAT ou push direto");
            console.log(userData.custom_data.chatUUID);

            if(notification.userdata.custom_data.chatUUID == 'undifined' ||
               notification.userdata.custom_data.chatUUID == undefined   ||
               notification.userdata.custom_data.chatUUID == null ) {

               var event = new CustomEvent('directpush', { detail: notification.userdata.custom_data });
               window.dispatchEvent(event);
            }
          }
        }

        pushNotification.setApplicationIconBadgeNumber(0);
    });

    //initialize the plugin
    pushNotification.onDeviceReady({pw_appid:"60C72-3A9F2"});

    //register for pushes
    pushNotification.registerDevice(
        function(status) {
            var deviceToken = status['deviceToken'];
            //console.warn('registerDevice: ' + deviceToken);
            window.localStorage['token'] = deviceToken;
        },
        function(status) {
            console.warn('failed to register : ' + JSON.stringify(status));
            // alert(JSON.stringify(['failed to register ', status]));
        }
    );

    //reset badges on app start
    pushNotification.setApplicationIconBadgeNumber(0);


  }else {

    //set push notifications handler
    document.addEventListener('push-notification', function(event) {
        var title = event.notification.title;
        var userData = event.notification.userdata;

        console.log('userData.custom_data');
        console.log(JSON.stringify(userData.custom_data));

        if(userData && userData.custom_data){
          // caso seja promoçãp
          if(userData.custom_data.promotion_id){
            console.log(userData);
            console.log(userData.custom_data.promotion_id);
            window.open(servidor+'/promocao/'+userData.custom_data.promotion_id, '_blank', 'location=yes','closebuttoncaption=FECHAR');
          } else {
            console.log("CHAT ou push direto");
            console.log(userData.custom_data.chatUUID);

            if(userData.custom_data.chatUUID == 'undifined' ||
               userData.custom_data.chatUUID == undefined   ||
               userData.custom_data.chatUUID == null ) {

               var event = new CustomEvent('directpush', { detail: userData.custom_data });
               window.dispatchEvent(event);
            }
          }
        }

    });

    //initialize Pushwoosh with projectid: "78196470103", pw_appid : "60C72-3A9F2".
    pushNotification.onDeviceReady({ projectid: "78196470103", pw_appid : "60C72-3A9F2" });

    //register for pushes
    pushNotification.registerDevice(
        function(status) {
          var pushToken = status;
          console.warn('push token: ' + JSON.stringify(pushToken));
          window.localStorage['token'] = pushToken;

        },
        function(status) {
            console.warn(JSON.stringify(['failed to register ', status]));

        }
    );

  }
}
<file_sep>/www/js/Ctrl_Cartoes.js
app.controller('Cartoes', ['$scope', '$http', '$interval','$window', function($scope, $http, $interval, $window) {
  atualizar();

  $scope.vencidos = [];
  $scope.atuais = [];


  $scope.controleFiltroCartoes = 0;

  $scope.viewCartao = function(id){
    console.log(id);
    $window.location = '#/cartaoHistorico/' + id;
  }


  //$interval(atualizar, 100000, false);
  function atualizar(){


   if($scope.controleFiltroCartoes == 1){
      $scope.labelCartao = "Cartões Vencidos";

    }else{
      $scope.labelCartao = "Cartões Válidos";
    }
    


    $http({
      url: servidor+'/webservice/cards/', 
      method: "GET",
      params: {
        user: G_usuario.id
      }
    }).

    success(function (data, status, headers, config) {
      $scope.$broadcast('scroll.refreshComplete');
      
      $scope.msg = " ";
      console.log(data);

      if(data == 0){
        $scope.msg = "Ainda não tem cartão em nenhum bar!";
      }else{


        $scope.vencidos = [];
        $scope.atuais = [];
        
        for (var i = 0; i < data.length; i++) {

          var parts = data[i].due_date.split('-');
          var dataFim = new Date(parts[2],parts[1]-1,parts[0]); 

          var dataAtual = new Date();

          if(dataAtual > dataFim){
            $scope.vencidos.push(data[i])
          }else{
            $scope.atuais.push(data[i])
          }
        };

        //$scope.Cartoes = $scope.atuais;


      }
    }).

    error(function (data, status, headers, config) {
      $scope.$broadcast('scroll.refreshComplete');
      console.log('Error cartoes');
    });
    $scope.$broadcast('scroll.refreshComplete');
  }

  $scope.doRefresh = function() {
    atualizar();
  }

  $scope.mudar = function() {

    console.log($scope.controleFiltroCartoes);

    if($scope.controleFiltroCartoes == 1){
      $scope.labelCartao = "Cartões Vencidos";
      $scope.controleFiltroCartoes = 0;
      $scope.Cartoes = $scope.atuais;

    }else{

      $scope.labelCartao = "Cartões Válidos";
      $scope.Cartoes = $scope.vencidos;
      $scope.controleFiltroCartoes = 1;
    }

  }



}]);<file_sep>/www/js/Ctrl_Config.js
app.controller('Config', ['$scope', '$http', '$ionicPopup', function($scope, $http, $ionicPopup) {

	$scope.promocoes = G_usuario.promotion;
	$scope.gps = G_usuario.gps;
	$scope.visibilidade = G_usuario.visibility;
  $scope.privacidade = false;
  console.log("user id:" + G_usuario.id);
	$scope.submitConfig = function() {
    $http({
      url: servidor+'/webservice/update_config/', 
      method: "POST",
      params: {
        id: G_usuario.id,
        promotion: $scope.promocoes,
        gps: $scope.gps,
        visibility: $scope.visibilidade,
        card_secret: $scope.privacidade
      }
    }).
    success(function (data, status, headers, config) {
      G_usuario.promotion = $scope.promocoes;
      G_usuario.gps = $scope.gps;
      G_usuario.visibility = $scope.visibilidade;
      G_usuario.card_secret = $scope.privacidade;
      alerta($ionicPopup, "Notificação", "Configurações salvas!");
    }).

    error(function (data, status, headers, config) {
      console.error(status);
      alerta($ionicPopup, "Notificação", "Problema no servidor, tente novamente.");
      console.log('Error Config');
    });
	};

}]);<file_sep>/www/js/Ctrl_Bar.js
app.controller('Bar', ['$scope', '$stateParams',  function($scope, $stateParams) {
	$scope.bar = G_bares.getId($stateParams.id);

	$scope.link = function(site){
		var ref = window.open('http://www.'+site, '_blank', 'location=yes');
		var myCallback = function() { 

		}
		ref.addEventListener('loadstart', myCallback);
		//ref.removeEventListener('loadstart', myCallback);
		//window.open(site, '_blank', 'location=yes');
	}
}]);<file_sep>/www/js/Service_Amizade.js
app.factory('Amizade', ['$http', function($http){
  /**
  * -1: Erro de servidor
  */

  function getAllAmigos(myId){
    var req = {
      method: 'GET',
      url: servidor+'/webservice/friends',
      params: { 
        id: myId
      }
    }

    return $http(req).
      then(function (sucesso) {
        //console.log(sucesso);
        return sucesso.data;
      },
      function(fail){
        return -1;
      });
  }

  function getAllSolicitacoes(myId){
    var req = {
      method: 'GET',
      url: servidor+'/webservice/friends/new',
      params: { 
        id: myId
      }
    }

    return $http(req).
      then(function (sucesso) {
        //console.log(sucesso);
        return sucesso.data;
      },
      function(fail){
        return -1;
      });
  }

  function NovaAmizade(myId, emailAmigo){

  }

  function AceitarAmizade(idSolicitacao){
    var req = {
      method: 'POST',
      url: servidor+'/webservice/friends/acept',
      params: { 
        id: idSolicitacao
      }
    }

    return $http(req).
      then(function (sucesso) {
        console.log(sucesso);
        return sucesso.data;
      },
      function(fail){
        return -1;
      });
  }

  function RecusarAmizade(idSolicitacao){
    var req = {
      method: 'POST',
      url: servidor+'/webservice/friends/remove',
      params: { 
        id: idSolicitacao
      }
    }

    return $http(req).
      then(function (sucesso) {
        console.log(sucesso);
        return sucesso.data;
      },
      function(fail){
        return -1;
      });
  }

  function RemoverAmigo(idAmizade){
    console.log(idAmizade)
  }

  return {
    getAllAmigos: getAllAmigos,
    getAllSolicitacoes: getAllSolicitacoes,
    AceitarAmizade: AceitarAmizade,
    RecusarAmizade: RecusarAmizade,
    RemoverAmigo: RemoverAmigo
  };
}]);<file_sep>/www/js/Ctrl_LoginForm.js
app.controller('LoginForm', ['$scope', '$http', '$location', '$state', 'Usuario','Geolocalizacao', function($scope, $http, $location, $state, Usuario,Geolocalizacao) {
  $scope.msg = " ";
  $scope.checked = false;
  $scope.version = window.localStorage['version'];
  $scope.submit = function() {
    $scope.msg = " ";

    if($scope.email == undefined ){
      $scope.msg = "O e-mail digitado é inválido";
      return 0;
    }

    if($scope.senha == undefined ){
      $scope.msg = "O campo 'Senha' está vazio";
      return 0;
    }

    if($scope.senha.length < 8 ){
      $scope.msg = "Senha precisa ter 8 ou mais dígitos";
      return 0;
    }
    $scope.checked = true;
    $http({
      url: servidor+'/webservice/authenticate_user/',
      method: "POST",
      params: {
        email: $scope.email,
        password: $scope.<PASSWORD>,
        token: window.localStorage['token']
      }
    }).

    success(function (data, status, headers, config) {
      console.log(data.name.substring(0,10))
      window.localStorage['nome'] = data.name.substring(0,10);
      window.localStorage['email'] = $scope.email;
      window.localStorage['senha'] = $scope.senha;
      $scope.msg = "";
      $scope.email = "";
      $scope.senha = "";
      window.localStorage['atualizarDados'] = 1;
      window.localStorage['atualizarCartao'] = 1;
      window.localStorage['login'] = 1;
      G_usuario = data;
      $scope.checked = false;
      console.log(G_usuario.id);
      window.localStorage['user_id'] = G_usuario.id;
      //Usuario.UpdateToken(G_usuario.id, window.localStorage['token']);
      Geolocalizacao.UpdateGps();

      var event = new CustomEvent('getiduser', { detail: G_usuario.id });
      window.dispatchEvent(event);

      $location.path('/menu/home');
    }).

    error(function (data, status, headers, config) {
      console.log('Error LoginForm');
      $scope.checked = false;
      $scope.msg = "Usuário ou senha incorretos";
    });
  };

  /**
  * Verificação se o usuario encerrou o app sem deslogar
  * se tiver feito isto então ele realiza o login automatico
  */
  if(window.localStorage['login'] == undefined){
    window.localStorage['login'] = 0;
    console.log("zerei");
    // $state.reload();
    window.location.reload(true);
  } else if(window.localStorage['login'] == 1) {
    $scope.email = window.localStorage['email'];
    $scope.senha = window.localStorage['senha'];
    $scope.submit();
    console.log("passei");
  } else{
    window.localStorage['login'] = 0;
    console.log("fiquei");
  }
}]);
<file_sep>/www/js/funcoes.js
/**
* Função para gerar uma tela de alerta no app
* @param alert - Variável '$ionicPopup' do Ionic
* @param titulo - Título do alert
* @param msg - Mensagem do corpo do alert
*/
function alerta (alert, titulo, msg) {
  alert.alert({
   title: titulo,
   template: msg
 });
}

/**
* Converte latitude e longitude para radianos
* Função utilizada em GetLocation()
*/
function conversor (angle) {
  return (angle * 3.14)/180;
}

/**
* Retorna a distancia entre dois pontos, em kilometros
* Os dados de entrada tem que estar em radianos
*/
function Distancia (latA, lonA, latB, lonB) {
  var x = 6371*Math.acos( Math.sin(latA)*Math.sin(latB) + Math.cos(latA)*Math.cos(latB) * Math.cos(lonA-lonB));
  return x;
}

/**
* Envia uma notifição para o usuario
* @param texto - Texto a ser mostrado na noficiação
*/
function Notificar (texto) {
  window.plugin.notification.local.add({ message: texto });
}

// variaveis para realizar testes de distancia
lat = conversor(-5.855706);
lon = conversor(-35.2454187);

function GetLocation() {
  if(window.localStorage['login'] == 1){
    
    navigator.geolocation.getCurrentPosition(function(position) {
      window.localStorage['latitude'] = position.coords.latitude;
      window.localStorage['longitude'] = position.coords.longitude;
      Comparar();
    }, function(error) {
        console.log('Erro ao pegar localização: ' + error.message);
    }, {enableHighAccuracy: true });
  }
}

/**
* Compara a posição atual com a posição dos bares.
* Se a distancia for menor que 1km ele envia uma notificação para o usuário.
*/
function Comparar(){
  for(i = 0; i < G_bares.length; i++){
    lat = conversor(G_bares[i].latitude);
    lon = conversor(G_bares[i].longitude);
    distancia = Distancia(lat, lon, conversor(window.localStorage['latitude']), conversor(window.localStorage['longitude']));
    //console.log(distancia);
    if(distancia <= 1.0){
      Notificar("O bar "+G_bares[i].name+" está perto de você!");
    }
  }
}<file_sep>/www/js/Service_Cartao.js
app.factory('CartoesPessoais', ['$http', function($http){
  var cartoes = 0;
  /**
  * -1: Erro de servidor
  *  1: Sucesso
  */
  function getCartoes(id){
    if(cartoes == 0){
      var req = {
        method: 'GET',
        url: servidor+'/webservice/cards/particular',
        params:{
          user: id
        }
      }
      $http(req).
        then(function (sucesso) {
          console.log(sucesso);
          cartoes = sucesso;
          return cartoes;
        },
        function(fail){
          console.error("fail getCartoes - id"+id);
          return -1;
        });
    }
    return cartoes;
  }


   function getCartaoPorId(id){
    if(cartoes == 0){
      var req = {
        method: 'GET',
        url: servidor+'/webservice/cards/',
        params:{
          id: id
        }
      }
      $http(req).
        then(function (sucesso) {
          console.log(sucesso);
          return sucesso;
        },
        function(fail){
          console.error("fail getCartoes - id"+id);
          return -1;
        });
    }
    return id;
  }

  function atualizar(id){
    var req = {
      method: 'GET',
      url: servidor+'/webservice/cards/particular/',
      params: { 
        user: id
      }
    }

    $http(req).
      then(function (sucesso) {
        cartoes = sucesso;
        return 1;
      },
      function(fail){
        return -1;
      });
  }

  function deletar(cardId, userId){
    var req = {
      method: 'GET',
      url: servidor+'/webservice/delete_card/',
      params: { 
        user_id: userId,
        card_id: cardId
      }
    }

    $http(req).
      then(function (sucesso) {
        atualizar(userId);
        return 1;
      },
      function(fail){
        console.error(fail);
        return -1;
      });
  }

  function getId(id){
    var i;
    x = cartoes.data;
    console.log(x)
    for (i = 0; i < x.length; i++) {
      if(x[i].id == id)
        return x[i];
    }
    return -1;
  }

  return {
    getCartoes: getCartoes,
    atualizar: atualizar,
    getId: getId, 
    deletar: deletar
  }
}]);<file_sep>/www/js/Ctrl_Back.js
app.controller('Back', ['$scope', '$ionicHistory',  function($scope, $ionicHistory) {
   $scope.myGoBack = function() {
   	window.history.back();
    //$ionicHistory.goBack();
  };
}]);