var logged_in = false;
var open_popup = null;
var HOME_HASH = '/welcome';
var ITEMS_HASH = '/items';
var FILTER_HASH = '/filter';
var BOARD_HASH = "/bord";
var LESSON_HASH = "/pages";
var FAVS_HASH = "/favorites";
var HELP_HASH = "info/help";
var POPUP = "POPUP:";
var HASHLINK = "HASH:";
var FEEDBACK_HASH = "/feedbacks/new";
var SESSION_INVALID_HASH = "/timeout";
var SELECTOR = "#main";
var _lastRetrievedUrl = "";
var _curUrl = "";
var _refererUrl = "";
var _returnUrl = "";
var _isPlayerReady = false;
var _startPending = false;
var _startPendingLogin = false;
var _startPendingLesson = false;
var _startPendingLessonLogin = false;
var _pendingAnchor = null;
var _pendingChecksum = null;
var _prefix = "";
var timer;

function showPlayer(newUrlObj) { // only called from flash
    setTimeout("showPlayer2('"+ newUrlObj.toString() + "')", 1);
    return true;
}

function showPlayer2(newUrl) {
    _curUrl = newUrl;
    location.hash = "!" + _curUrl;
    if (_curUrl == LESSON_HASH) {document.title = "Gynzy | Mijn lessen";}
    if (_curUrl == FAVS_HASH) {document.title = "Gynzy | Favorieten overzicht";}
    if (_curUrl == BOARD_HASH) {document.title = "Gynzy | Bord";}
    $("#main").css('display','none');
    $("#sidebar").css('width', '100%');
    $("#sidebar").css('height', '100%');
}

function setTab(target) { // makes a call to flash
    if (_isPlayerReady) {
            $('#flashApp')[0].callSetTab(target);
    }
    return false;
}

function loadTool(panchor) { // makes a call to flash
    if(!logged_in)
    {
      var itemId = $(panchor).attr('data-item-id');
      _pendingAnchor = panchor;
      _startPendingLogin = true;
      $('#popup_container').load(_prefix + "/login_tool", {'item_id': itemId})
    } else if (_isPlayerReady) {
        if ( $(panchor).attr('data-item-json') != undefined) {
            $('#flashApp')[0].callLoadToolWithData($(panchor).attr('data-item-id'), $(panchor).attr('data-item-json'));
        } else {
            $('#flashApp')[0].callLoadTool($(panchor).attr('data-item-id'));
        }
    } else {
        $("#preloader").css('display','block');
        _pendingAnchor = panchor;
        _startPending = true;
    }
    return false;
}

function loadLesson(checksum) {
  if(!logged_in)
  {
    _pendingChecksum = checksum;
    _startPendingLessonLogin = true;
    $('#popup_container').load(_prefix + "/login_tool", {'checksum': checksum})
  } else if (_isPlayerReady) {
    $('#flashApp')[0].callOpenLesson(checksum);
  } else {
    $("#preloader").css('display','block');
    _pendingChecksum = checksum;
    _startPendingLesson = true;
  }
}

function onCancelPreloader(event) {
    _startPending = false;
    _startPendingLesson = false;
    _pendingAnchor = null;
    _pendingChecksum = null;
    $("#preloader").css('display','none');
    event.stopImmediatePropagation(); 
    return false;
}

function attachAnchorEvents() {
    attachKeyboardButtons();
    $("a").unbind("click");
    $("#preloader .cancel").click(onCancelPreloader);
    $("a.startplayer").click(function(event) {
        event.stopImmediatePropagation();
        return loadTool($(this));
    });
    $('a:not(.external)').click(function() {
        loadUrl($(this).attr('href').replace(location.protocol + '//' + location.host, ''));
        return false;
    });
    if (isKiosk) {
      $('a.external').click(function() {
        openExternalURL($(this).attr('href'));
        return false;
      }); 
      $('a.logout').click(function() {
        window.location = $(this).attr('href');
        return true;
      });
    };
    $("form:not(.external)").submit(function() {
        if ($(this).attr('method').toUpperCase() == "GET") {
            loadUrl($(this).attr('action') + "?" + $(this).serialize());
            return false;
        }
        var success = function(data, status, xhr){
                        $("#main").html( 
                            // Create a dummy div to hold the results
                            jQuery("<div />")
                            // inject the contents of the document in, removing the scripts
                            // to avoid any 'Permission Denied' errors in IE
                            .append(xhr.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
                            // Locate the specified elements
                            .find(SELECTOR)
                            );
                        // set the page title
                        document.title = $(".top h1").text();
                        attachAnchorEvents();
                        showMessagesAndAnimations();
                        $("#main").css('display','block');
                        $("#sidebar").css('width', '43px');
                        $("#sidebar").css('height', '100%');
                        
                        if(!logged_in && $('#goPlayer').size() > 0)
                        {
                          logged_in = true;
                          goPlayer($('#goPlayer').attr('data-user_id'), $('#goPlayer').attr('data-session_id'));
                        }
                        
                        if(logged_in)
                        {
                          $('#login').hide();
                          $('#logout').show();
                        }
                        if(bindAutocomplete)
                          bindAutocomplete();
                    }
        var queryString = $(this).serialize();
        _lastRetrievedUrl = "";
        $.ajax({
            type: $(this).attr('method').toUpperCase(),
            url: $(this).attr('action'),
            data: queryString,
            success: success,
            dataType: "html"
        });

        // !!! Important !!! 
        // always return false to prevent standard browser submit and page navigation 
        return false;
    });
}

function reloadFavorites() {
  if (_isPlayerReady) {
     $('#flashApp')[0].callReloadFav();
  }
}

function eraseCookie(name) {
  var date = new Date();
  date.setTime(date.getTime()-(24*60*60*1000));
  var expires = "; expires="+date.toGMTString();
  document.cookie = name+"="+expires+"; path=/";
}

function setOnBeforeUnload() {
  if ($('#flashApp') != undefined && $('#flashApp').length > 0) {
    $('#flashApp')[0].onbeforeunload();
  }
  return;
}

function onPlayerReady() {
    _isPlayerReady = true;
    document.title = $(".top h1").text();
    $("#preloader").css('display','none');
    if (_startPending) {        
        loadTool(_pendingAnchor);
        _startPending = false;
    }
    else if(_startPendingLesson)
    {
      $('#flashApp')[0].callOpenLesson(_pendingChecksum);
      _startPendingLesson = false;
    }
    if (isKiosk) {
        initKiosk();
    }
    return true;
}

function toggleWindowFullscreen(screenState) {
    setTimeout("toggleWindowFullscreen2('"+ screenState + "')", 1);
    return true;
}

function toggleWindowFullscreen2(screenState) {
    if ((typeof isKiosk === "undefined") || !isKiosk || !Object.prototype.hasOwnProperty.call(window.external, "ExecuteCommand")) return;
    window.external.ExecuteCommand(screenState);
}

function closePopup()
{
  _startPendingLogin = false;
  _startPendingLessonLogin = false;
  $('#popup_container').html('');
}

function loadUrl(purl) {
  closePopup();
    purl = purl.replace('#!','').replace('#', '');
    if (purl.indexOf(_prefix) == -1) {
      hash_value = purl;
      // Strip of first / of purl
      purl = _prefix + purl.substring(1);
    } else {
      // Make sure the first character is a / 
      hash_value = purl.substring(_prefix.length - 1)
    }
    if (purl.length>0) {
        if (_curUrl==purl) {
          // alert("already on this page - _curUrl");
          return;
        }
        if (purl.indexOf(BOARD_HASH) > -1) {return setTab(BOARD_HASH);}
        if (purl.indexOf(LESSON_HASH) > -1) {return setTab(LESSON_HASH);}
        if (purl.indexOf(FAVS_HASH) > -1) {return setTab(FAVS_HASH);}
        setTab();
        _refererUrl = _curUrl;
        _curUrl = purl;
        if (_lastRetrievedUrl==_curUrl) {
            location.hash = "!" + hash_value;
            document.title = $(".top h1").text();
            // alert("already on this page - _lastRetrievedUrl");
            return;
        }
        if (purl.indexOf('?')>=0) {
            purl = purl + "&ref=" + escape(_refererUrl);
        } else {
            purl = purl + "?ref=" + escape(_refererUrl);
        }        
        doLoadURL(purl);
    }
}

function reloadCurrentPage(message)
{
  doLoadURL(_curUrl, message);
}

function doLoadURL(purl, message)
{
  $("#spinner").show();
  $("#main").load(purl + " " + SELECTOR, function(response, status, xhr) {
    // inject the contents of the document in, removing the scripts to avoid any 'Permission Denied' errors in IE
    var responseBody = jQuery("<div />").append(xhr.responseText.replace(/<script(.|\s)*?\/script>/g, ""));
    var containerNode = responseBody.find(SELECTOR)
    $(this).html(containerNode.size() == 1 ? containerNode : xhr.responseText);

    // set the page title
    document.title = $(".top h1").text();
    _lastRetrievedUrl = _curUrl;
    // google analytics call here.
    if (pageTracker) {
      pageTracker._trackPageview(_curUrl);
    }
    location.hash = "!" + hash_value;
    attachAnchorEvents();
    $("#spinner").hide();
    if (_curUrl.indexOf(FEEDBACK_HASH) >= 0) {
      $('#flash').val(getFlashVersion());
    }
    showMessagesAndAnimations();
    if(message != null) {
      show_message(message);
    }
    if(logged_in)
    {
      $('#login').hide();
      $('#logout').show();
      $('.show_when_logged_in').show();
    }
    // TODO: find better solution!
    if(bindAutocomplete)
      bindAutocomplete();
  });
}

function closeLoginConfirmation()
{
  clearTimeout(timer);
  if(_startPendingLogin)
    loadTool(_pendingAnchor);
  else if(_startPendingLessonLogin)
    loadLesson(_pendingChecksum);
  closePopup();
}

function showMessagesAndAnimations() {
  if ($('.knoppen') != undefined && $('.knoppen').text() != '') {
    $("body").addClass("homepage");
  } else {
    $("body").removeClass("homepage");
  }
  if ($('#message_bar_content') != undefined && $('#message_bar_content').text() != '') {
    $("#message_bar_content").css('display','none');
    show_message($('#message_bar_content').html());
  } else {
    hide_message_fast();
  }
  if ($('#change_container_class') != undefined && $('#change_container_class').text() != '') {
    $("#change_container_class").css('display','none');
    $('#container').addClass($('#change_container_class').html());
  }
  $('html, body').animate({
    scrollTop: $('body').offset().top
  }, 500);
  if (window.PIE) {
    $('.btn').each(function() {
      PIE.attach(this);
    });
  }
  addAirInfo();
}

function showSite() {
    $("#main").css('display','block');
    $("#sidebar").css('width', '43px');
    $("#sidebar").css('height', '100%');
}

function stopPlayer(goal) { // only called from flash
    setTimeout("stopPlayer2('"+ goal.toString() + "')", 1);
    return true;
}

function stopPlayer2(goal) { // called from flash
  	showSite();
   	if (goal=="RETURN") {
      loadUrl(_lastRetrievedUrl);
    } else if (goal=="HELP") {
        loadUrl(_prefix + HELP_HASH);
    } else if (goal=="SESSION_INVALID") {
        loadUrl(_prefix + SESSION_INVALID_HASH);
    } else if (goal=="INIT") {
        //nothing
    } else if (goal.toString().indexOf(HASHLINK)==0) {
        loadUrl(goal.toString().substring(5, goal.toString().length));
    } else if (goal.toString().indexOf(POPUP)==0) {
        showPopup(goal.toString().substring(6, goal.toString().length));
        stopPlayer("RETURN");
    }
    return false;
}

function showPopup(windowURL) {
    var windowFeatures =    'height=500' +
                            ',width=500' +
                            ',left=50' +
                            ',top=50' +
                            ',toolbar=1' +
                            ',scrollbars=1' +
                            ',status=1' + 
                            ',resizable=1' +
                            ',location=1' +
                            ',menuBar=1';

    window.open(windowURL, "gynzy_popup", windowFeatures).focus();
}

function redirectForHashNavigation() {
  if (location.pathname.indexOf("/be/nl/") == 0) {
    _prefix = "/be/nl/";
  } else if (location.pathname.indexOf("/de/") == 0) {
    _prefix = "/de/";
  } else if (location.pathname.indexOf("/en/") == 0) {
    _prefix = "/en/";
  } else if (location.pathname.indexOf("/xx/") == 0) {
    _prefix = "/xx/";
  } else if (location.pathname.indexOf("/nl/") == 0) {
    _prefix = "/nl/";
  } 
  if (_prefix != "" && _prefix != location.pathname) {
      window.location = _prefix + "#!/" + location.pathname.substring(_prefix.length) + location.search;
      return;
  }
}
redirectForHashNavigation();

$(document).ready(function() {
    if(logged_in)
    {
      $('#login').hide();
      $('#logout').show();
      $('.show_when_logged_in').show();
    }
    document.title = $(".top h1").text();
    attachAnchorEvents();
    $(window).bind('hashchange', function(){
        loadUrl(location.hash);
    });
    var h = location.hash.replace('#!','');
    if (h == BOARD_HASH || h == LESSON_HASH || h==FAVS_HASH) {
        loadUrl(h);
    } else if (h.indexOf(HOME_HASH) > -1) {
        // already on the home page so do nothing
    } else if (h.length>0) {
        _returnUrl = h;
        loadUrl(h);
    } else {
        loadUrl(HOME_HASH);
    }
    
    if(open_popup != null)
    {
      $('#popup_container').load(_prefix + open_popup);
    }
    window.onbeforeunload = function(e){setOnBeforeUnload();};
    addAirInfo();
});

