/**
 * FuguDataLoader - developed by fugu GmbH, Bern, Switzerland, www.fugu.ch
 * 
 * Loads, save and returns the content
 */
FuguDataLoader = new AJS.Class({
	url           : null,
  data          : new Object(),
  lookUp        : new Object(),
  ordered       : new Array(),
  loaded        : false,
	
	init : function(url) {
		this.url = url;
	},
		
	// Ajax call to the url for the data
	loadData : function(parameterArray) {
	  d = AJS.getRequest(this.url, null, "GET");
    d.addCallback(AJS.$b(this.dataLoaded, this));
    d.sendReq();
	},
	
	dataLoaded : function(res_txt, req) {
    try {
      this.data = eval('('+ res_txt + ')');
    }
    catch(e) {
      this.data = eval(res_txt);
    }
    
    //Start with home
    this.ordered[this.ordered.length]='';
    
    var d1 = this.data['data'];
    for (var k1 in d1) {
      if(this.ordered[this.ordered.length-1]!=''){
        this.ordered[this.ordered.length]='';
      }
      var d2 = d1[k1];
      
      if(d2['list']!=null){
        
        var key = extractURLKey(d2['_websiteurl_']);
        this.data['data'][k1]['urlkey'] = key;
        this.data['data'][k1]['type'] = k1;
        this.lookUp[key] = this.data['data'][k1];
        
        var d3 = d2['list'];
        if(d3!=null){
          var prevKey = null;
          for (var k3 in d3) {
            var key = extractURLKey(d3[k3]['_websiteurl_']);
            //For home
            if(key==null){
              key = this.data['data'][k1]['urlkey'];
            }
            if(key!=null){  
              this.data['data'][k1]['list'][k3]['urlkey'] = key;
              this.data['data'][k1]['list'][k3]['type'] = k1;
              this.data['data'][k1]['list'][k3]['parent'] = this.data['data'][k1];
              this.lookUp[key] = this.data['data'][k1]['list'][k3];
              if(key.length>0){
                this.ordered[this.ordered.length]=key;
              }
              if(prevKey!=null){
                this.data['data'][k1]['list'][prevKey]['next'] = this.data['data'][k1]['list'][k3];
                this.data['data'][k1]['list'][k3]['previous'] =  this.data['data'][k1]['list'][prevKey];
              }
              prevKey = k3;
            }
          }
        }
      }
      else {
        for (var k2 in d2) {
          var key = extractURLKey(d2[k2]['_websiteurl_']);
          this.data['data'][k1][k2]['urlkey'] = key;
          this.data['data'][k1][k2]['type'] = k1;
          this.lookUp[key] = this.data['data'][k1][k2];
          
          var d3 = d2[k2]['list'];
          if(d3!=null){
            //Add home
            if(this.ordered[this.ordered.length-1]!=''){
              this.ordered[this.ordered.length]='';
            }
            
            var c=0;
            var prevKey = null;
            for (var k3 in d3) {
              if(c==0){
                //this.data['data'][k1][k2]['_websiteurl_'] = d3[k3]['_websiteurl_'];
              }
              c++;
              
              var key = extractURLKey(d3[k3]['_websiteurl_']);
              if(key!=null){
                this.data['data'][k1][k2]['list'][k3]['urlkey'] = key;
                this.data['data'][k1][k2]['list'][k3]['type'] = k1;
                this.data['data'][k1][k2]['list'][k3]['parent'] = this.data['data'][k1][k2];
                this.lookUp[key] = this.data['data'][k1][k2]['list'][k3];
                if(key.length>0){
                  this.ordered[this.ordered.length]=key;
                }
                if(prevKey!=null){
                  this.data['data'][k1][k2]['list'][prevKey]['next'] = this.data['data'][k1][k2]['list'][k3];
                  this.data['data'][k1][k2]['list'][k3]['previous'] =  this.data['data'][k1][k2]['list'][prevKey];
                }
                prevKey = k3;
              }
            }
          }
        }
      }
    }
    
    /*
    for(var i=0;i<this.ordered.length;i++){
      console.log(i+':'+this.ordered[i]);
    }
    */
    
    /*
    for(var x in this.lookUp){
      //console.log(x+' '+this.lookUp[x]['name']+' *'+this.lookUp[x]['urlkey']+'*'); 
      var o = this.lookUp[x]['parent'];
      if(o!=null){
        if(o['urlkey']==null){
          console.log(x+' '+this.lookUp[x]['name']+' *'+this.lookUp[x]['urlkey']+'*'); 
          console.log('  parent: '+o['name']+' *'+o['urlkey']+'*'); 
        }
      }
      / *
      var o = this.lookUp[x]['previous'];
      if(o!=null){
        console.log('  previous: '+o['name']+' *'+o['urlkey']+'*'); 
      }
      var o = this.lookUp[x]['next'];
      if(o!=null){
        console.log('  next: '+o['name']+' *'+o['urlkey']+'*'); 
      }* /
    }
    */
        
    this.loaded = true;
       
    if(this.onDataLoaded!=null){
      this.onDataLoaded();
    }
	},
  
  getData : function(){
    return this.data['data']; 
  },
  
  getLookUp : function(){
    return this.lookUp; 
  },
  
  getOrdered : function(){
    return this.ordered; 
  },
  
  getTemplate : function(name){
    if(this.data!=null && this.data['templates']!=null){
      return this.data['templates'][name];
    }
    return '?';
  }
});