window.artkreuzberg = window.artkreuzberg || {};

artkreuzberg.Controller = function() {

  var self = {
    previewState : ""
  };

  var dispatchNavigation = function( location ) {

    var s = location.split("/");

    switch(s[1]) 
    {
      case  "street" : {
        
         artkreuzberg.View.showStreet(s[2]);
         break;
      }
      case  "artists" : {
        
         artkreuzberg.View.showArtists();
         break;
      }
      case  "location" : {
        
         artkreuzberg.View.showLocation(s[2]);
         break;
      }
      case  "locations" : {
        
         artkreuzberg.View.showLocations();
         break;
      }
      case  "news" : {
        
         artkreuzberg.View.showUrl("/ajax/info/news");
         break;
      }
      case  "impressum" : {
        
         artkreuzberg.View.showUrl("/info/impressum");
         break;
      }
      case  "late-register" : {
        
         artkreuzberg.View.showUrl("/info/late-register");
         break;
      }
      case  "sponsor" : {
        
         artkreuzberg.View.showUrl("/ajax/info/sponsoren");
         break;
      }
/*
      case "special" :
      case "info" :
      case "ajax" : {
         artkreuzberg.View.showUrl(location);
         break;
      }
*/
      case "map" : {
         if ( artkreuzberg.Model.current.substring(0,5) != "#/map" ) {
           artkreuzberg.View.showMain(s[2]);
         }
         break;
      }
      default : {
         artkreuzberg.View.showMain();
      } 
    }
    return false;
  };


  var get_tour_id_from_hash = function() {

    var hash = document.location.hash;

    if ( hash == "#" )
     return -1;

    if ( hash.substr(0,6) == "#/map/" )
      hash = hash.substr(6);
    else if ( hash.substr(0,11) == "#/location/" )
      hash = hash.substr(11);

    var index = -1;
    for ( var i = 0; i < artkreuzberg.Model.index.length; i++)
    {
      if ( artkreuzberg.Model.index[i].name == hash ) 
      {
         index = i;
         break;
      }
    }

    return index;
  };

  var injectPreview = function ( pos,url ) {

      if ( self.previewState == url ) { return; };
      self.previewState  = url;  

      var html = "<iframe class='preview' id='preview' src='";
          html+= url 
          html+= "' height='800' width='1200'> "; 
          html+= "</iframe>";

      $('#previewContainer')
        .html(html)
        .css('left', (pos.left+300) +"px")
        .css('top', (pos.top-150) +"px")
        .show();

  };

  var controller = {

    onload : function() {

      var queryString = window.location.search;
      if ( queryString.match("nojs") ) {
        artmode  = 0;
        $.cookie('nojs','true');
      }
      if ( $.cookie('nojs') == 'true' ) {
        artmode = 0;
      }

      $.ajax( '/ajax/info/ajaxdata', {
                dataType : 'json',
                success : function(data, textStatus, jqXHR) {

                  artkreuzberg.Controller.ondata(data);
                },
                error : function(jqXHR, textStatus, errorThrown) { 
                  //alert("ajax err! " + textStatus + errorThrown.message); 
                }
      });

    },

    ondata : function(data) {

      artkreuzberg.Model = artkreuzberg.modelFactory(data);

      if ( artmode == 1 ) {
        artkreuzberg.View.hookEvents();
      }

      var hash = document.location.hash;
      if ( hash != "" && hash != "#" ) {
        dispatchNavigation(hash);
      }
      else {
        if ( typeof(artkreuzberg.showMainMap) != "undefined") {
          artkreuzberg.showMainMap();
        }
        else if ( window.location.pathname.substr(0,7) == "/street" ) {
          var path = window.location.pathname;
          var street= path.substr(8);
          artkreuzberg.View.showStreetMap(street);
        }
      }
    },    


    onTarget : function(location) {

      document.location.hash = location;
      return false;
    },

    onHashChange : function() {

      if ( !artkreuzberg.Model ) 
        return;

      artkreuzberg.Controller.onPreviewOut();

      var current = artkreuzberg.Model.current;
      if ( current != document.location.hash ) {
    
        if ( document.location.pathname != "/" ) {
          document.location.href = "/#" + document.location.hash.substring(1); 
        }
        else {

          dispatchNavigation(document.location.hash);
        }
      }
      artkreuzberg.Model.current = document.location.hash;
    },

    tour_next : function()
    {
      var index = get_tour_id_from_hash();

      index++;

      if ( index >= artkreuzberg.Model.index.length ) 
        index = 0;

      artkreuzberg.mainMap.openInfo(index);
      document.location.hash = "#/map/"+artkreuzberg.Model.index[index].name;
      artkreuzberg.Model.current = "#/map/"+artkreuzberg.Model.index[index].name;
      return false;
    },

    tour_last : function()
    {
      var index = get_tour_id_from_hash();
      index--;

      if ( index < 0 ) 
        index = artkreuzberg.Model.index.length-1;

      artkreuzberg.mainMap.openInfo(index);
      document.location.hash = "#/map/"+artkreuzberg.Model.index[index].name;
      artkreuzberg.Model.current = "#/map/"+artkreuzberg.Model.index[index].name;
      return false;
    },

    location_next : function()
    {
      var index = get_tour_id_from_hash();

      index++;

      if ( index >= artkreuzberg.Model.index.length ) 
        index = 0;

      document.location.hash = "#/location/"+artkreuzberg.Model.index[index].name;
      return false;
    },

    location_last : function()
    {
      var index = get_tour_id_from_hash();
      index--;

      if ( index < 0 ) 
        index = artkreuzberg.Model.index.length-1;

      document.location.hash = "#/location/"+artkreuzberg.Model.index[index].name;
      return false;
    },


    onPreviewOver : function( that ) {

      return;
      var n = $(that);  
      var p = n.offset();

      try {

        injectPreview(p,n.attr('href'));

      }
      catch(e) {
      }
 
    },

    onPreviewOut : function() {

      return;
      $('#previewContainer').empty();
      self.previewState  = "";
    }    

  };

  return controller;

}();


