/**
 * Abstraindo informções em JS para criação de um menu hierárquico simples
 * a partir de consulta Jquery.AJAX() no banco de dados
 * 
 * @author Daniel Andrade - Mada Internet
 * @version 0.0.1
 * */

/* Definindo Objeto do Menu */
function Menu(idMenu, Nome, Link, Filhos){

    this.idMenu = idMenu;
    this.Nome   = Nome;
    this.Link   = Link;
    
    this.Filhos = Menu.prototype.montarFilhos(Filhos);
    
    
};
/* Implementando metodos no Objeto definido*/
Menu.prototype = {
    /* Definido o nome do Construtor da Classe */
    constructor: Menu,
    
    /* Metodos Getters e Setters */
    getIdMenu: function(){
        return this.idMenu;
    },
    
    getNome: function(){
        return this.Nome;
    },
    setNome: function(nome){
        this.Nome = nome;
    },
    
    getLink: function(){
      return this.Link;
    },
    setLink: function(link){
        this.Link = link;
    },
    
    getFilhos: function(){
        return this.Filhos;
    },
    setFilhos: function(filhos){
        this.Filhos = filhos;
    },
    
    montarFilhos: function(filhos){
        var f = {};
        if(typeof filhos === 'object'){
            for(var chave in filhos){
                f[chave] = new Menu(filhos[chave].idmenu, filhos[chave].nome, filhos[chave].link, filhos[chave].filhos);
            };
            return f;
        }
    }
};
/* Conectando ao Banco e Montando Objeto JS | DAO */
function getMenu(){}
getMenu.prototype = {
    constructor: getMenu,
    buscaAjax: function(){
        var b = $.ajax({
             url: 'app/model/ajax/ajax_menus.php',
             data: { model: 'Menu', acao: 'getMenu' },
             type: 'GET',
             async: false,
             dataType: 'json'
        });
        return JSON.parse(b.responseText);
    },
   montaMenus: function(){
        var json = getMenu.buscaAjax();
        var menus = [];
        $.each(json, function(i, item){
             var m =  new Menu(item.idmenu, item.nome, item.link, item.filhos);
             menus.push(m); m = null;
        });
        return menus; 
   }
};

/* Carregando ações dos cliques do Menu */
function Acao(){}
Acao.prototype = {
    constructor: Acao,
    dados: null,
    definir: function(q){
        var r = {};
        q.split('\/').forEach(function(v, c){
            switch(c){
                case 1: r.model = v;    break;
                case 2: r.acao = v;     break;
                case 3: r.registro = v; break;    
                case 4: r.param = v;    break;    
            }
            r.tipoReq = 'carregarPagina';
        });
        this.dados = r;
    },
    mudarModulo: function (){
        window.location.href = '../'+path;
    },
    carregarPagina: function (pagina){
        $('#loader').show();
        $.ajax({
            url: pagina,
            cache: false,
            dataType: 'html'
        }).done(function(r){
            $('#conteudo').html(r);
            $('#loader').hide();
        }).error(function(xhr, st, err){
            console.log(xhr);
        });
    },
    processar: function(q){
        Acao.prototype.definir(q);
        if(this.dados.acao === 'mudarModuloAtual') $('#modulos').html('<img src="imgs/load-small.gif" />'); 
        var r = $.ajax({
                url: 'app/model/ajax/ajax_menus.php',
                data: this.dados,
                type: 'GET',
                async: false,
                dataType: 'json'
            }).done(function(xhr, status, error){
                if(xhr.callback == 'MudarModulo' && xhr.retorno === 1){
                    Acao.prototype.mudarModulo();
                }else if(xhr.callback == 'CarregarPag'){
                    Acao.prototype.carregarPagina(xhr.retorno);
                }
            }).error(function(xhr, status, error){
                console.log(xhr.responseText);
            });
        return r;    
    }
};

/* Instanciando o Objeto e setando a variável com os Menus*/
var getMenu = new getMenu();    
var Menus   = getMenu.montaMenus();
/* Monitora ação do clique no Menu ou se ação de Menu Já veio preenchida na URL*/
/*
new Acao();
window.onhashchange=function(){Acao.prototype.processar(window.location.hash.substr(1));};
if(window.location.hash){Acao.prototype.processar(window.location.hash.substr(1));}
*/