﻿function pageload(hash){
    var args = hash.match(/c=(\d+)(?:&s=(\d+))?/);
    if(args != null){
        var cat = args[1];
        var subcat = args[2];
        laadFaq(cat, subcat)
    }
}

$(function(){
// zorgt ervoor dat er een loading bericht word weergegeven
 $("#ajaxLoader").ajaxStart(function(){
   $(this).show();
 });
 $("#ajaxLoader").ajaxComplete(function(){
   $(this).hide();
 });

// pak eerst de open categorie voor het geval de pagina is gelaad vanuit 
// zorg ervoor dat terug naar het overzicht de juiste javascript function oproept
$('#faqTerug a:first').click(function(){
    sluitSubcategorie();
    return false;
});
// probeer de actieve sub en vraag te zetten voor het geval hij uit html modus komt
var liSubCat = $('ul#categorie li ul:first');
if(liSubCat.length > 0)setActieveSubCategorie(liSubCat);
var liVraag = $('ul#categorie li ul li ul');
if(liVraag.length > 0 ){
setActieveVraag(liVraag);
// set de history 
    var h = liVraag.find('a').attr('href');
    //Default.aspx?categorie=25&subcategorie=7&lang=nl
    var args = h.match(/.*categorie=(\d+)&subcategorie=(\d+)/);    
    
            if(args != null){
                var cat = args[1];
                var subcat = args[2];
                $.historyInit(pageload);
                $.historyLoad('c=' + cat + '&s=' + subcat);
            }
}else{
$.historyInit(pageload);
}
      $('ul#categorie').delegate('click', 'a', function(){
        // <ul><li><a>..
        var ul = $(this).parent().parent();
        var ret = false;
        switch(ul.attr('class')){
            case 'categorie':
            // Default.aspx?categorie=25&lang=nl
            // laad de subcategorie
            // pak de cat landg en subcat
            if($(this).parent().data('status') != 'open'){
                var h = $(this).attr('href');
                var args = h.match(/.*categorie=(\d+)/);
                if(args == null)break;
                var cat = args[1];
                $.historyLoad('c=' + cat);
            }
            break;
            case 'subcategorie':
            if($(this).parent().data('status') != 'open'){
            var h = $(this).attr('href');
            //Default.aspx?categorie=25&subcategorie=7&lang=nl
    var args = h.match(/.*categorie=(\d+)&subcategorie=(\d+)/);    
            if(args == null)break;
            var cat = args[1];
            var subcat = args[2];
            $.historyLoad('c=' + cat + '&s=' + subcat);
            }
            break;
            default:
            ret = true;
            break;
        }
        return ret;
      });
});
function laadFaq(cat, subcat){

    // pak de a die met het meegegeven cat argument correspondeert
    // categorie link = Default.aspx?categorie=25
    var linkStr = 'Default.aspx?categorie=' + cat;
    var linkSelector = 'ul#categorie>li>a[@href=' + linkStr + ']';
    
    // zet de waardes van cat en subcat
    $('ul#categorie').data('cat', cat);
    if(typeof subcat != 'undefined'){
        $('ul#categorie').data('subcat', subcat);
    }
    var link = $(linkSelector);
    laadSubCategorie(link);
}

function laadSubCategorie(el){
    // kijk of de categorie al een keer is geopend 
    // li heeft status open/gesloten als hij al eens geladen is
   var status = el.parent().data('status');

   if(typeof status == 'undefined'){
    // DE STATUS is noch gesloten of open hij moet dus geladen worden    
      
   var href = el.attr('href');
   
   if(typeof href == 'undefined'){return;}
   
   if(href.indexOf('?') == -1)return;

   var marker = href.indexOf('?');
   href = href.substring(marker, href.length);
      
       $.getJSON('handler.ashx' + href, function(data){
            // sluit de actieve subcat
            sluitSubcategorie();
            // el is de href waar hij ingeladen in moet worden
            var li = el.parent();
            // geef li de status open 
                
            var d = eval(data);
            var container = '<ul style="display:none" class="subcategorie">';
                for(var element in d.elementen){
                    container += '<li><a href="Default.aspx?categorie=' 
                    + d.categorie + '&subcategorie=' + d.elementen[element].id 
                    + '" title="' + d.elementen[element].titel 
                    + '">' + d.elementen[element].titel
                    + '</a></li>';
                }
            container += "</ul>";
            // append de ul aan de li
            li.append(container);
            var opensub = li.find('ul');
            setActieveSubCategorie(opensub);
       });
   }else if(status == 'gesloten'){
        sluitSubcategorie();
        var ul = el.parent().find('ul:first');
        setActieveSubCategorie(ul);
    }else{
        var ul = el.parent().find('ul:first');
        setActieveSubCategorie(ul);
    }
    // status is open doe niets
    // op dit moment moet $('ul#categorie').data('opensubcategorie'); 
    // gedefinieerd zijn
    // vind de a die met de subcat correspondeert
}
function subCatGeladen(subcat){

    var subcatId = $('ul#categorie').data('subcat');
    
    if(subcatId == "")subcatId = "undefined";
    
    var cat = $('ul#categorie').data('cat');
    
    var linkStr = 'Default.aspx?categorie=' + cat + 
        '&subcategorie=' + subcatId;
    var linkSelector = 'a[href~=' + linkStr + ']';
    
    
    var link = $('ul#categorie li ul li ' + linkSelector);
    
   
    if(link.href != 'undefined'){
        laadVragen(link);}
    else{
        sluitSubcategorie();
    }
}

function setActieveSubCategorie(el){
    $('ul#categorie').data('opensubcategorie', el);
    el.fadeIn();
    el.parent().data('status', 'open');
    // wacht even
    subCatGeladen(el);
}
function sluitSubcategorie(){
var el = $('ul#categorie').data('opensubcategorie');
    if(typeof el != 'undefined'){
    var p = el.parent();
    if(typeof p != 'undefined')p.data('status', 'gesloten');
    el.fadeOut();    
    }
}
function setActieveVraag(deUL){
// geeft de ul mee waarin de vragen zitten
deUL.parent().data('status', 'open');
deUL.fadeIn();
// el.parent vd vragenUl is de li
var ul = deUL.parent().parent();
    if(typeof ul != 'undefined' && typeof deUL != 'undefined'){
    ul.data('openvraag', deUL);
    }
}
function sluitActieveVraag(el){

    if(typeof el != 'undefined'){
    var actieveVraag = el.data('openvraag');
   
        if(typeof actieveVraag != 'undefined'){
            actieveVraag.parent().data('status', 'gesloten');
            actieveVraag.fadeOut();
        }
    }
}


function laadVragen(el){
    // kijk of de vraag al een keer is geopend 
    // li heeft status open/gesloten als hij al eens geladen is
    
    var status = el.parent().data('status');
    //alert(status);
    if(status == 'gesloten'){
        // geef de ul mee a > li > ul
        sluitActieveVraag( el.parent().parent() );
        var ul = el.parent().find('ul');
        setActieveVraag(ul);
        return;
    }else if(status == 'open')return;
    
    // DE STATUS is noch gesloten of open hij moet dus geladen worden    
   var href = el.attr('href');
   if(typeof href == 'undefined')return;
   if(href.indexOf('?') == -1)return;
   var marker = href.indexOf('?');
   href = href.substring(marker, href.length);
      
   $.getJSON('handler.ashx' + href, function(data){
    // sluit de actieve subcat
    sluitActieveVraag( el.parent().parent() );
    // el is de href waar hij ingeladen in moet worden
    var li = el.parent();
    var d = eval(data);
    var container = '<ul style="display:none" class="vragen">';
    for(var element in d.elementen){
        container += '<li><a href="FAQ.aspx?categorie=' + d.categorie + 
        '&subcategorie=' + d.subcategorie  + '&id=' + d.elementen[element].id +
        '" title="' + d.elementen[element].titel + '">' + 
        d.elementen[element].titel + '</a></li>';
    }
    container += "</ul>";
    // append de ul aan de li
    li.append(container);
    var openvraag = li.find('ul');
    openvraag.data('subcategorie', d.subcategorie);
    setActieveVraag(openvraag);
   });
}