// JavaScript Document

var countdowntimer;

(function(){
  var special = jQuery.event.special,
      uid1 = 'D' + (+new Date()),
      uid2 = 'D' + (+new Date() + 1);

  jQuery.event.special.focus = {
      setup: function() {
          var _self = this,
              handler = function(e) {
                  e = jQuery.event.fix(e);
                  e.type = 'focus';
                  if (_self === document) {
                      jQuery.event.handle.call(_self, e);
                  }
              };

          jQuery(this).data(uid1, handler);

          if (_self === document) {
              /* Must be live() */
              if (_self.addEventListener) {
                  _self.addEventListener('focus', handler, true);
              } else {
                  _self.attachEvent('onfocusin', handler);
              }
          } else {
              return false;
          }

      },
      teardown: function() {
          var handler = jQuery(this).data(uid1);
          if (this === document) {
              if (this.removeEventListener) {
                  this.removeEventListener('focus', handler, true);
              } else {
                  this.detachEvent('onfocusin', handler);
              }
          }
      }
  };

  jQuery.event.special.blur = {
      setup: function() {
          var _self = this,
              handler = function(e) {
                  e = jQuery.event.fix(e);
                  e.type = 'blur';
                  if (_self === document) {
                      jQuery.event.handle.call(_self, e);
                  }
              };

          jQuery(this).data(uid2, handler);

          if (_self === document) {
              /* Must be live() */
              if (_self.addEventListener) {
                  _self.addEventListener('blur', handler, true);
              } else {
                  _self.attachEvent('onfocusout', handler);
              }
          } else {
              return false;
          }

      },
      teardown: function() {
          var handler = jQuery(this).data(uid2);
          if (this === document) {
              if (this.removeEventListener) {
                  this.removeEventListener('blur', handler, true);
              } else {
                  this.detachEvent('onfocusout', handler);
              }
          }
      }
  };

})();


function rebuildurl(url) {
  var parts = url.split('.php?');
  var time = new Date;
  if (typeof(parts[1]) != "undefined") {
     url=url.replace(/&t=\d+/g, "");
     url=url.replace(/\?t=\d+/g, "?");
     url=url+'&t='+time.getTime();
  } else {
     if (window.location.pathname=='/login.php' && securecode != 0) {
        url='index.php?t='+time.getTime();        
     } else {
        url=url+'?t='+time.getTime();
     }
  }
  return url;
}

function startTrainTimeCountdown(time) {
  traintimeleft = time;
  if (countdowntimer != 0) {
    window.clearInterval(countdowntimer);
    countdowntimer = 0;
  }
  countdowntimer = window.setInterval('countdownTrainTime()',1000);
}

function countdownTrainTime() {
  traintimeleft = traintimeleft-1; 
  newtime = secoundsToHumanCounterTime(traintimeleft);
  $('#countdowntime').text(newtime);
  if (traintimeleft <= 0) {
    window.clearInterval(countdowntimer);
  }
}

function secoundsToHumanCounterTime(timestamp) {
  sekunden = timestamp;

  stunden=Math.floor(sekunden/3600);
  sekunden-=stunden*3600;
  
  addtimetype = ' Stunden';
  if (stunden == 0) {
    stunden = '';
    addtimetype = ' Minuten';
  } else {
    stunden += ':';
  }
  
  minuten=Math.floor(sekunden/60);
  sekunden-=minuten*60;
  
  if(sekunden < 10) sekunden = "0"+sekunden;
  if(minuten < 10) minuten = "0"+minuten;
  
  text = stunden+minuten+':'+sekunden+addtimetype;
  return text;
}

function loadcontent(url) {
  window.clearInterval(globalinterval);
  url= rebuildurl(url);
  $.get(url,function(data){
    $('#paper-modal-content').html(data);
    if ((typeof(reload) != 'undefined')&&(reload > 0)) {
      updatescreen();
      reload = 0; 
    }
    if ($('#countdowntime').length > 0) {
      if ($('#countdowntime').length > 0) {
        startTrainTimeCountdown($('#countdowntime').attr('name'));
      }
    }
    $('input, textarea').addClass('idle'); 
    if ((typeof(message) != 'undefined')&&(message > 0)) {
      showMessage(message); 
    }
    if ($('#draggable').length > 0) {
      showtut('');
    }
  }); 
}

function trim (text) {
  text=text.replace (/^\s+/, '').replace (/\s+$/, '');
  return text;
}

 function isDigit( ch )
  {
    if ( (ch >= '0') && (ch <= '9') )
      return true;
    else
      return false;
  }


  function isAlpha( ch )
  {
    if ( ((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) )
      return true;
    else
      return false;
  }


  function isAlnum( ch )
  {
    if ( isAlpha( ch ) || isDigit( ch ) )
      return true;
    else
      return false;
  }


  function notIn( str1, str2 )
  {
    var i = 0;
    var j = str2.length;
    for( ; i<j; i++ )
    {
      var str3 =  str2.charAt(i);
      if( str1.indexOf( str3 ) != -1 )
        return false;
    }
    return true;
  }


  function checkUsername( username, mustBeQuoted )
  {
    var i = 0;
    var j = username.length;
    if ( username.charAt(0) != '"' )
    {
      if ( (username.charAt(0) <  ' ') || (username.charAt(0) >  '~')
            || !notIn( mustBeQuoted, username.charAt(0) ) )
        return false;
      for( i=1; i<j; i++ )
      {
        if ( ( (username.charAt(i) < ' ') || (username.charAt(i) >  '~')
              || !notIn ( mustBeQuoted, username.charAt(i) ) )
             && ( username.charAt(i-1) != '\\' ) )
          return false;
      }
    }
    else
    {
      if ( username.charAt( j-1 ) != '"' )
        return false;
      for( i=1; i<j-1; i++ )
      {
        if ( ( (username.charAt(i) == '\n') || (username.charAt(i) == '\r')
              || (username.charAt(i) == '\"') )
            && (username.charAt(i-1) != '\\') )
          return false;
      }

    }
    return true;
  }


  function checkNr ( nr )
  {
    var i=0;
    var j=nr.length;

    if( j < 1 )
      return false;

    for( ; i<j; i++ )
      if( ( nr.charAt(i) < '0' ) || ( nr.charAt(i) > '9' ) )
        return false;

    return true;
  }


  function checkIpnr( ipnr )
  {
    var iL=0;
    var iC=0;
    var i=0;
    var sNr = "";

    for( ; i< ipnr.length; i++ )
    {
      if ( ipnr.charAt(i) == '.' )
      {
        if ( !iL || (iL> 3) || parseInt( sNr,10 ) > 255 )
          return false;
        iC++;
        iL = 0;
        sNr = "";
        continue;
      }
      if ( isDigit ( ipnr.charAt(i) ) )
      {
        iL++;
        sNr = sNr + ipnr.charAt(i);
        continue;
      }
      return false;
    }

    if ( parseInt( sNr,10 ) > 255 )
      return false;
    if ( ( (iC==3) && (iL>=1) && (iL<=3) ) || ( (iC==4) && (!iL) )  )
      return true;
    else
      return false;
  }


  function checkFqdn( fqdn )
  {
    var iL=0;
    var iC=0;
    var i=fqdn.length-1;

    if ( (fqdn.charAt(0) == '.') || (fqdn.charAt(0) == '-') )
      return false;
    if ( fqdn.charAt(i) == '.' )
      i=i-1;

    for( ; i>=0; i-- )
    {
      if ( fqdn.charAt(i) == '.' )
      {
        if ( iL < 2 && iC < 2 )
          return false;
        if ( fqdn.charAt(i-1) == '-' )
          return false;
        iC++;
        iL = 0;
        continue;
      }
      if ( isAlnum ( fqdn.charAt(i) ) )
      {
        iL++;
        continue;
      }
      if ( fqdn.charAt(i) == '-' )
      {
        if ( !iL )
          return false;
        iL++;
        continue;
      }
      return false;
    }

    if ( !iC || ( iL == 1 && iC < 2 ) || ( !iL && iC==1 ) ) {
      return false;
    }

    return true;

  }


  function checkHostname( hostname )
  {
    if ( hostname.charAt(0) == '[' )
    {
      if ( hostname.charAt(hostname.length-1) != ']' )
        return false;
      var ipnr = hostname.substring( 1, hostname.length -1 );
        return checkIpnr( ipnr );
    }

    if ( hostname.charAt(0) == '#' )
    {
      var nr = hostname.substring( 1, hostname.length );
        return checkNr( nr );
    }

    return checkFqdn( hostname );
  }


  function checkEmailAdr( address )
  {
    var status = true;
    var username = "";
    var hostname = "";

    if ( address.length < 8 )
      return false;

    var seperate = address.lastIndexOf("@");
    if ( seperate == -1 )
      return false;

    username = address.substring(0, seperate );
    if ( ! checkUsername( username, "<>()[],;:@\" " ) )
      return false;

    hostname = address.substring(seperate+1, address.length );
    if ( ! checkHostname( hostname ) )
      return false;

    return true;
  }


function checkEmail( email, allowFullname )
{
  var existFullname = false;
  var status = true;
  var fullname = "";
  var adress = "";
  if ( email.length < 8 )
    return false;
  var emailBegin = email.indexOf("<");
  var emailEnd = email.lastIndexOf(">");

  if ( (emailBegin == -1) && (emailEnd == -1) )
    return checkEmailAdr( email );

  if ( ( (emailBegin == -1) && (emailEnd != -1) )
      || ( (emailBegin != -1) && (emailEnd == -1) ) )
    return false;

  adress = email.substring( emailBegin+1, emailEnd );

  if ( ! checkEmailAdr( adress ) )
    return false;

  if ( email.length == adress.length + 2 )
    return true;
  else
    if ( ! allowFullname )
      return false;

  if ( emailEnd == email.length - 1 )
  {
    if ( emailBegin == 0 )
      return true;
    if ( email.charAt( emailBegin -1 ) != ' ' )
      return false;
    fullname = email.substring( 0, emailBegin-1 );
    return checkUsername ( fullname, "<>()[],;:@\"" );
  }

  return false ;

}


