var partialOpacity = .5;
var inactiveFadeEnabled = true;
var inactiveFadeTime = 5000;
var timeToFade = 1000;
var sleepBeforeResetTime = 2000;

var mouseTimeout;
var fullFadeClass = ".fullFade";
var partialFadeClass = ".partialFade";
var fadingOut = false;
var fadedOut = false;
var fadingIn = false;

var oldScreenX = -1;
var oldScreenY = -1;

function setActivityListeners() {
  $(document).mousemove(checkRealMoveThenFadeIn);
  $(document).mousedown(fadeIn);
  $(document).keydown(fadeIn);
  $(document).mouseenter(fadeIn);
  $(document).mouseleave(fadeIn);
}

function eraseActivityListeners() {$(document).unbind();}

function setupInactiveFade() {
  mouseTimeout = setTimeout(fadeOut, inactiveFadeTime);
  fadingIn = false;
  setActivityListeners();
}

afterInactiveFadeInCb = function () {};

function sleepThenSetup(didsomething) {
  fadedOut = false;
  fadingOut = false;
  if (didsomething) afterInactiveFadeInCb();
  setTimeout(setupInactiveFade, sleepBeforeResetTime);
}

function fadeOut() {
  if (inactiveFadeEnabled) {
    fadingOut = true;
    $(fullFadeClass).fadeTo(timeToFade, 0, function(){fadingOut=false; fadedOut=true;});
    $(partialFadeClass).fadeTo(timeToFade, partialOpacity, function(){});}
}

function checkRealMoveThenFadeIn(e) {
  var isIE = document.all ? true : false;
  if (!isIE) {fadeIn(e);} else if (event && (event.screenX != oldScreenX || event.screenY != oldScreenY)) {
    oldScreenX = event.screenX;
    oldScreenY = event.screenY;
    fadeIn();
  } 
}

fadingInAnimation = false;
function fadeIn(e) {
  eraseActivityListeners();
  if (fadingIn) return;
  fadingIn = true;
  var alreadyFullOpacity = !fadedOut;
  //fadedOut = false;
  clearTimeout(mouseTimeout);
  if (fadingOut) {
    $(fullFadeClass).stop(false,false);
    $(partialFadeClass).stop(false,false);
    alreadyFullOpacity = false;
  }

  //IF OPACITY IS 1 then just sleep then setup!!!!
  if ( alreadyFullOpacity ) sleepThenSetup(false);
  else {
    $(fullFadeClass).fadeTo(timeToFade, 1, function() {$(fullFadeClass).css("filter", ""); sleepThenSetup(true);} );
    $(partialFadeClass).fadeTo(timeToFade, 1, function(){ $(partialFadeClass).css("filter", ""); });
  }
}
