/*
 *  Klassenname: loginSession
 *
 *  Beschreibung: Im Prinzip selber Aufbau wie auf PHP Seite!
 */
var Session = Class.create();
Session.prototype = { initialize:         function() { document.observe("dom:loaded", this.initAll.bindAsEventListener(this) ); },
                      initAll:            function() { makeSessionCheck(); },
                      set_userdata_value: function( userdata, value ) 
                                          {
                                            switch( userdata ) {
                                              case 'userid':   this.userid = value;   break;
                                              case 'username': this.username = value; break;
                                              case 'vorname':  this.vorname = value;  break;
                                              case 'nachname': this.nachname = value; break;
                                            } 
                                          },
                      get_userdata_value: function( userdata ) 
                                          {
                                            var returnValue;
                                            switch( userdata ) {
                                              case 'userid':   returnValue = this.userid;   break;
                                              case 'username': returnValue = this.username; break;
                                              case 'vorname':  returnValue = this.vorname;  break;
                                              case 'nachname': returnValue = this.nachname; break;
                                            } return returnValue; 
                                          },
                      set_groupdata_value: function( groupdata, value ) 
                                           {
                                             switch( groupdata ) {
                                               case 'groupid':   this.groupid = value;   break;
                                               case 'groupname': this.groupname = value; break;
                                               case 'groupbeschreibung': this.groupbeschreibung = value; break;
                                               case 'groupweight': this.groupweight = value; break;
                                             } 
                                           },
                      get_groupdata_value: function( groupdata ) 
                                           {
                                             var returnValue;                                            
                                             switch( groupdata ) {
                                               case 'groupid':   returnValue = this.groupide;   break;
                                               case 'groupname': returnValue = this.groupname; break;
                                               case 'groupbeschreibung': returnValue = this.groupbeschreibung; break;
                                               case 'groupweight': returnValue = this.groupweight; break;
                                             } return returnValue; 
                                           },
                      set_sessiondata_value: function( sessiondata, value ) 
                                             {
                                               switch( sessiondata ) {
                                                 case 'sessionid':    this.sessionid = value;    break;
                                                 case 'sid':          this.sid = value;          break;
                                                 case 's_status':     this.s_status = value;     break;
                                                 case 'creationtime': this.creationtime = value; break;
                                                 case 'lastactivity': this.lastactivity = value; break;
                                                 case 'lastpageid':   this.lastpageid = value;   break;
                                                 case 'lastmodulid':  this.lastmodulid = value;  break;
                                                 case 'msg':          this.msg         = value;  break;
                                                 case 'class_complete': this.class_complete = value; break;
                                                 case 'PHPParseTime': this.PHPParseTime = value; break;
                                               } 
                                             },
                      get_sessiondata_value: function( sessiondata ) {
                                               var returnValue;
                                               switch( sessiondata ) {
                                                 case 'sessionid':    returnValue = this.sessionid;    break;
                                                 case 'sid':          returnValue = this.sid;          break;
                                                 case 's_status':     returnValue = this.s_status;     break;
                                                 case 'creationtime': returnValue = this.creationtime; break;
                                                 case 'lastactivity': returnValue = this.lastactivity; break;
                                                 case 'lastpageid':   returnValue = this.lastpageid;   break;
                                                 case 'lastmodulid':  returnValue = this.lastmodulid;  break;
                                                 case 'msg':          returnValue = this.msg;           break;
                                                 case 'class_complete': returnValue = this.class_complete; break;
                                                 case 'PHPParseTime': returnValue = this.PHPParseTime; break;
                                               } return returnValue; } };  

/*
 * Wenn ein Besucher auf die Seite kommt ist das erste was gemacht werden muss die Klasse erstellen.
 * Falls sich nun der Besucher einloggt dann wird von der logn_LoginValidation das f�llen
 * der Klasse vorgenommen.
 */
var Session = new Session();

/* #############################################################################################################################################
 * 
 * Session Check
 *
 * ############################################################################################################################################# */
function makeSessionCheck() 
{ 
  new Ajax.Request( 'modules/sessionhandling/initsession.php', {
    onCreate:   function() { $('div_loginmsg').update('SessionCheck gestartet...'); },
    onComplete: function( originalRequest ) { 
      var XHR, page;
      XHR = originalRequest.responseText.evalJSON();
      /* Die Klasse wird mit den Sessiondaten geladen und die Seite wird angezeigt */
      Session.set_userdata_value( 'userid',   XHR.userid );
      Session.set_userdata_value( 'username', XHR.username );
      Session.set_userdata_value( 'vorname',  XHR.vorname );
      Session.set_userdata_value( 'nachname', XHR.nachname );
      /* Anschliessend die Gruppendaten */
      Session.set_groupdata_value( 'groupid', XHR.groupid );
      Session.set_groupdata_value( 'groupname', XHR.groupname );
      Session.set_groupdata_value( 'groupbeschreibung', XHR.groupbeschreibung );
      Session.set_groupdata_value( 'groupweight', XHR.groupweight );
      /* Zu guter letzt die Sessiondaten */
      Session.set_sessiondata_value( 'sessionid', XHR.sessionid );
      Session.set_sessiondata_value( 'sid', XHR.sid );
      Session.set_sessiondata_value( 'creationtime', XHR.creationtime );
      Session.set_sessiondata_value( 'lastactivity', XHR.lastactivity );
      Session.set_sessiondata_value( 'lastpageid', XHR.lastpageid );
      Session.set_sessiondata_value( 'lastmodulid', XHR.lastmodulid );
      Session.set_sessiondata_value( 's_status', XHR.s_status );
      Session.set_sessiondata_value( 'msg', XHR.msg );  
      Session.set_sessiondata_value( 'class_complete', '1' );
      Session.set_sessiondata_value( 'PHPParseTime', XHR.PHPParseTime );
      /* Nachdem die Klasse mit Daten gefuellt wurde nun die eingetragene Startseite des Benutzers laden */
      if( (XHR.lastpageid != 'home') && (XHR.lastpageid != '') ) page = XHR.lastpageid; else page = 'home';  
      if( XHR.s_status == 'login' ) show_LoggedinSite( XHR ); else show_LoggedoutSite();
      showPageFromDB( page, null, true ); }
  }); 
}

function loginValidation() { $('frm_login_username').disable(); 
                             $('frm_login_password').disable(); 
                             $('frm_login_submit').disable(); 
                             loadDynamic( { username: $F('frm_login_username'), password: $F('frm_login_password') }, 
                                          'login', loginCheckLoginResponse, null, null, false );}
/*
 *  Diese Funktion laedt dann nachdem loginscript die Seite nach
 */
function loginCheckLoginResponse( XHR )
{
  if( XHR.s_status == "login" ) {
    /* Klasse fuellen Zuerst den User */
    Session.set_userdata_value( 'userid',   XHR.userid );
    Session.set_userdata_value( 'username', XHR.username );
    Session.set_userdata_value( 'vorname',  XHR.vorname );
    Session.set_userdata_value( 'nachname', XHR.nachname );
    /* Anschlie�end die Gruppendaten */
    Session.set_groupdata_value( 'groupid', XHR.groupid );
    Session.set_groupdata_value( 'groupname', XHR.groupname );
    Session.set_groupdata_value( 'groupbeschreibung', XHR.groupbeschreibung );
    Session.set_groupdata_value( 'groupweight', XHR.groupweight );
    /* Zu guter letzt die Sessiondaten */
    Session.set_sessiondata_value( 'sessionid', XHR.sessionid );
    Session.set_sessiondata_value( 'sid', XHR.sid );
    Session.set_sessiondata_value( 's_status', XHR.s_status );
    Session.set_sessiondata_value( 'creationtime', XHR.creationtime );
    Session.set_sessiondata_value( 'PHPParseTime', XHR.PHPParseTime );
    Session.set_sessiondata_value( 'lastactivity', XHR.lastactivity );
    Session.set_sessiondata_value( 'msg', XHR.msg );
    Session.set_sessiondata_value( 'class_complete', '1' );
    
    /* Nachdem die Klasse mit Daten gefaellt wurde nun die eingetragene Startseite des Benutzers laden */
    /* Zustand als eingeloggt anzeigen */    
    show_LoggedinSite( XHR ); 
    showPageFromDB( XHR.userstartpage, null, false );    
  } else {
    AccessExceptionHandler( XHR );  
    Session.set_groupdata_value( 'groupname', XHR.groupname );
    Session.set_groupdata_value( 'groupweight', XHR.groupweight );
    Session.set_userdata_value( 'username', XHR.username );
    Session.set_sessiondata_value( 's_status', XHR.s_status );
    Session.set_sessiondata_value( 'PHPParseTime', XHR.PHPParseTime );
    Session.set_sessiondata_value( 'msg', XHR.msg );  
    show_LoggedoutSite();
  } 
} 

function logoutValidation() { loadDynamic( null, 'logout', logoutCheckLogoutResponse, null, null, false ); }
function logoutCheckLogoutResponse( XHR )
{
  /* Klasse fuellen :: Zuerst der User */
  Session.set_userdata_value( 'userid',   XHR.userid );
  Session.set_userdata_value( 'username', XHR.username );
  Session.set_userdata_value( 'vorname',  XHR.vorname );
  Session.set_userdata_value( 'nachname', XHR.nachname );
  /* Anschliessend die Gruppendaten */
  Session.set_groupdata_value( 'groupid', XHR.groupid );
  Session.set_groupdata_value( 'groupname', XHR.groupname );
  Session.set_groupdata_value( 'groupbeschreibung', XHR.groupbeschreibung );
  Session.set_groupdata_value( 'groupweight', XHR.groupweight );
  /* Zu guter letzt die Sessiondaten */
  Session.set_sessiondata_value( 'sessionid', XHR.sessionid );
  Session.set_sessiondata_value( 'sid', XHR.sid );
  Session.set_sessiondata_value( 's_status', XHR.s_status );
  Session.set_sessiondata_value( 'creationtime', XHR.creationtime );
  Session.set_sessiondata_value( 'lastactivity', XHR.lastactivity );
  Session.set_sessiondata_value( 'msg', XHR.msg );
  show_LoggedoutSite();
  
  loadDynamic( null, 'home', null, null, null, false )
}

function show_LoggedinSite( XHR )
{
  var menue_intern_set = 0,
      menue_admin_set  = 0;
  //$('frm_login').enable();
  $('frm_login_username').enable();
  $('frm_login_password').enable();
  $('frm_login_submit').enable();  
  $('infoleiste_login').hide();
  $('infoleiste_logout').show();

  /* Menue aufbauen :: zuerst das Interne */
  if( XHR.menue_intern.forum >= "1" ) { $('menue_intern_forum').show(); menue_intern_set++; } else $('menue_intern_forum').hide();
  if( XHR.menue_intern.warplaner >= "1" ) { $('menue_intern_warplaner').show(); menue_intern_set++; } else $('menue_intern_warplaner').hide();
  if( XHR.menue_intern.userprofil >= "1" ) { $('menue_intern_userprofil').show(); menue_intern_set++; } else $('menue_intern_userprofil').hide();
  if( XHR.menue_intern.pictures >= "1" ) { $('menue_intern_pictures').show(); menue_intern_set++; } else $('menue_intern_pictures').hide();
  if( XHR.menue_intern.test >= "1" ) { $('menue_intern_test').show(); menue_intern_set++; } else $('menue_intern_test').hide();
  if( XHR.menue_intern.warhammer >= "1" ) { $('menue_intern_warhammer').show(); menue_intern_set++; } else $('menue_intern_warhammer').hide();
  if( menue_intern_set ) $('menue_intern').show();
  
  if( XHR.menue_admin.userverwaltung >= "1" ) { $('menue_manage_userverwaltung').show(); menue_admin_set++; } else $('menue_manage_userverwaltung').hide();
  if( XHR.menue_admin.newnews >= "1" ) { $('menue_manage_newnews').show(); menue_admin_set++; } else $('menue_manage_newnews').hide();
  if( XHR.menue_admin.forumverwaltung >= "1" ) { $('menue_manage_forumverwaltung').show(); menue_admin_set++; } else $('menue_manage_forumverwaltung').hide();
  if( XHR.menue_admin.siteverwaltung >= "1" ) { $('menue_manage_siteverwaltung').show(); menue_admin_set++; } else $('menue_manage_siteverwaltung').hide();
  if( XHR.menue_admin.squadlist >= "1" ) { $('menue_manage_squadlist').show(); menue_admin_set++; } else $('menue_manage_squadlist').hide();
  if( XHR.menue_admin.gameslist >= "1" ) { $('menue_manage_gameslist').show(); menue_admin_set++; } else $('menue_manage_gameslist').hide();
  if( menue_admin_set ) $('menue_manage').show(); 
  
  $('div_loginmsg').update( Session.get_sessiondata_value( 'msg' ) );
  $('span_login_username').update( Session.get_userdata_value( 'username' ) );
  $('span_PHPParseTime').update( Session.get_sessiondata_value( 'PHPParseTime' ) );
  $('span_login_status').update( Session.get_sessiondata_value( 's_status' ) );
  $('span_login_groupname').update( Session.get_groupdata_value( 'groupname' ) );
}

function show_LoggedoutSite()
{
  //$('frm_login').enable();  
  $('frm_login_username').enable();
  $('frm_login_password').enable();
  $('frm_login_submit').enable();
  $('infoleiste_login').show();
  $('infoleiste_logout').hide();  
  $('menue_intern').hide();
  $('menue_manage').hide();
  
  $('frm_login_username').value = strFrmUsernameStdText;
  $('frm_login_password').value = strFrmPasswordStdText;
  
  /* Menue aufbauen :: zuerst das Interne */
  $('div_loginmsg').update( Session.get_sessiondata_value( 'msg' ) );
  $('span_login_username').update( Session.get_userdata_value( 'username' ) );
  $('span_PHPParseTime').update( Session.get_sessiondata_value( 'PHPParseTime' ) );
  $('span_login_status').update( Session.get_sessiondata_value( 's_status' ) );
  $('span_login_groupname').update( Session.get_groupdata_value( 'groupname' ) );
}

function AccessExceptionHandler( XHR )
{
  MsgBox = new messageBox();
  if( XHR.s_status == 'loggedout' )
  {
    login_LogoutValidation();
    $('div_loginmsg').update('Logout Vorgang eingeleitet!');
    $('span_PHPParseTime').update(XHR.PHPParseTime);      
  }
  else if( XHR.s_status == 'noaccess' )
  {
    $('div_loginmsg').update('Kein Zugriff');
    $('span_PHPParseTime').update(XHR.PHPParseTime);
    MsgBox.createMessageBox('','Sie haben auf diesen Bereich keinen Zugriff!', null, null );  
  }
  else if( XHR.s_status == 'usernotfound' )
  {
    $('div_loginmsg').update('ung&uuml;ltige Benutzerdaten!');
    $('span_PHPParseTime').update(XHR.PHPParseTime);
    MsgBox.createMessageBox('','Ihre Logindaten sind nicht korrekt!', null, null );
  }
  else
  {
    MsgBox.createMessageBox('', XHR.msg, null, null );
    showPageFromDB( XHR.pageid, '', false );    
  }
}

