function redirect() {
  var url = window.location.href;
  if(window.location.href.indexOf('#') == -1){
    // No anchor found, redirect
    if (url.indexOf('/'+language) != -1) {
      url = url.replace('/'+language, '/'+language+'/#');
      window.location.href = url;
      return true;
    }
    else {
      window.location.href = urlPrefix+language+'/#';
      return true;
    }
  }
  else {
    if (url.indexOf('/'+language+'/#') == -1) {
      url = url.replace('#', '');
      url = url.replace('/'+language, '/'+language+'/#');
      window.location.href = url;
      return true;
    }
  }
}

function init() {
  if(redirect()){
    return; 
  }
  
  imageResize();
  AJS.$('loading').style.display = 'block';
  
  window.slideManager = new FuguSlideManager();
  window.menuBuilder = new FuguMenuBuilder();
  
  window.dataLoader = new FuguDataLoader(urlPrefix + /*'cached_'+*/'jsgateway.php');
  window.dataLoader.onDataLoaded = this.dataLoaded; // Call this function after loading
  window.dataLoader.loadData();
}

function dataLoaded(data) {
  if(!AJS.$('loading').locked){
    AJS.fx.fadeOut(AJS.$('loading'), {from: 0.8, onComplete: AJS.$b(function(foo, elm) {
        AJS.$('loading').style.left = '-2400px';
    }, this)});
  }
  
  try {
    
    AJS.AEV(window, 'resize', reposition);
    //document.onkeydown = navigateByKey;
    AJS.AEV(document, 'keydown', navigateByKey);
        
    window.currentOrderPos = 0; 
    
    SWFAddress.addEventListener(SWFAddressEvent.CHANGE, urlChanged);
    //SWFAddress.addEventListener(SWFAddressEvent.EXTERNAL_CHANGE, urlChanged);
               
    window.initalized = true;
    
    urlChanged();
    
  }
  catch(e){
  }
}

function goTo(url){
  if (window.initalized) {
    var urlKey = extractURLKey(url);
    var lookUp = window.dataLoader.getLookUp();
    var obj = lookUp[urlKey];
    if(obj==null){
      //Home has no key
      urlKey = '';
    }
    else {
      if(obj['parent']==null){
        if(obj['list']!=null){
          for(var i in obj['list']){
            //Redirect to child
            SWFAddress.setValue(obj['list'][i]['_websiteurl_']);
            return;
          }
        }
        //Home
        else {
          urlKey = '';
        }
      }
    }
    //urlKey = '';
    
    var rightToLeft = true;
    //Find positions
    var ordered = window.dataLoader.getOrdered();
    var nP = -1;
    for(var i=window.currentOrderPos;i<ordered.length;i++){
      if(ordered[i]==urlKey){
        nP = i; 
        break;
      }
    }
    //Not found (search from beginning
    if(nP==-1){
      for(var i=0;i<ordered.length;i++){
        if(ordered[i]==urlKey){
          nP = i; 
          break;
        }
      }
    }
      
    rightToLeft = window.keyRightToLeft;
    window.keyRightToLeft = null;
    if(rightToLeft==null){
      if(nP==0 && window.currentOrderPos==ordered.length-1){
        rightToLeft = true;
      }
      else {
        rightToLeft = (nP>=window.currentOrderPos);
      }
    }
    //console.log('goTo: '+nP+' '+window.currentOrderPos+' '+rightToLeft);
    
    window.currentOrderPos = nP;
        
    window.slideManager.update(window.currentOrderPos,rightToLeft);
    window.menuBuilder.update(window.currentOrderPos);
    resetScroll();
    window.setTimeout(resetScroll, 500);
  }
}

function resetScroll(){
  window.scrollTo(0,0); 
}

function urlChanged() {
  setTimeout(function() {
      if(window.currentChangedURL == location.hash){
        return;
      }
      window.currentChangedURL = location.hash;
      var url = location.hash.substring(1);
      if(url.lastIndexOf("/") == url.length - 1) {
        url = url.substring(1, url-1)
      }
      goTo(url);
  }, 1);
}

function navigateByKey (evt) {
  if (window.initalized){
    evt = evt || window.event;
    
    var d = new Date().getTime(); 
    if(window.lastKeyEvent!=null){
      //Process every 500ms
      if((d-window.lastKeyEvent)<500){
        return false; 
      }
    }
    window.lastKeyEvent = d;
    
    var lookUp = window.dataLoader.getLookUp();
    //Find positions
    var ordered = window.dataLoader.getOrdered();
    
    var rightToLeft = true;
    if (evt.keyCode == 37) { // Left
      rightToLeft = false;
    } 
    else if (evt.keyCode == 39) { // Right
      rightToLeft = true;
    } 
    else {
      return true;
    }

    window.navInfoClicked = true;
    window.keyRightToLeft = rightToLeft;
    
    var p = window.currentOrderPos+(rightToLeft?1:-1);
    
    if(p<0){
      p = ordered.length-1;
    }
    else if(p>=ordered.length){
      p = 0; 
    }
    
    var urlKey = ordered[p];
    var obj = lookUp[urlKey];
    if(obj!=null){
      var url = obj['_websiteurl_'];
      if(url==null)
        url = '';
      
      SWFAddress.setValue(url);
      window.currentOrderPos = p;
    }
  }
  return false;
}

function reposition() {
  if (window.initalized){
    window.slideManager.update(window.currentOrderPos,true);
  }
  imageResize();
}

function imageResize() {
  var bgimg = AJS.$('background_image');
  if (bgimg == null) { return; }
  var windowWidth  = AJS.getWindowSize().w; 
  var windowHeight = AJS.getWindowSize().h;
  if (windowWidth  >= windowHeight * 1600 / 1200) {
    bgimg.width        = windowWidth;
    bgimg.height       = windowWidth * 1200 / 1600;
    bgimg.style.width  = windowWidth + 'px';
    bgimg.style.height = windowWidth * 1200 / 1600 + 'px';
  } 
  else {
    bgimg.height       = windowHeight;
    bgimg.width        = windowHeight * 1600 / 1200;
    bgimg.style.width  = windowHeight * 1600 / 1200 + 'px';
    bgimg.style.height = windowHeight + 'px';
  }
}

function extractURLKey(url){
  if(url==null)
    return url;
  
  var p = url.indexOf('://');
  if(p!=-1){
    url = url.substring(p+3); 
    p = url.indexOf('/');
    if(p!=-1){
      url = url.substring(p); 
    }  
  }  
  var arr = url.split('/');
  if(arr!=null && arr.length==4){
    p = url.lastIndexOf('/');
    if(p!=-1){
      url = url.substring(0,p); 
    }
  }
  return url; 
}
