// =====================================================================================
//
//  cookie.js        Historie     
//
// =====================================================================================
//
//  06.06.2006  004   pm  Mozilla-Portierung
//  22.07.2007  005   pm  Neue Messageboards




function cookie_cnst_subrelease () {

         return ( "005" );


}




function cookie_messageboard_eintrag_heute_anzeigt ( external_debug_mode, external_mode, external_messageid, external_message_date ) {


         



// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90009 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90009" );
         }      



// ----- prep -------------------------------------------------------------------------------
//
//       13.07.2002 -> 20020713


         message_date_yyyymmdd = external_message_date.substr ( 6, 1 )
                               + external_message_date.substr ( 7, 1 )
                               + external_message_date.substr ( 8, 1 )
                               + external_message_date.substr ( 9, 1 )
                               + external_message_date.substr ( 3, 1 )
                               + external_message_date.substr ( 4, 1 )
                               + external_message_date.substr ( 0, 1 )
                               + external_message_date.substr ( 1, 1 );





// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              

              alert ( "external_debug_mode : " + external_debug_mode + "\n" +
                      "external_mode : " + external_mode + "\n" +  
                      "external_messageid : " + external_messageid + "\n" +  
                      "message_date_yyyymmdd : " + message_date_yyyymmdd + "\n" +  
                      "message_date : " + external_message_date );
         }      





// ----- filter : Messageboard -------------------------------------------------------------------------------

// 22.07.2007

         if ( external_mode  == 'add' ){

              if ( external_messageid.indexOf ( "501-0000" ) == -1  && 
                   external_messageid.indexOf ( "501-1000" ) == -1  && 
                   external_messageid.indexOf ( "501-6000" ) == -1  && 
                   external_messageid.indexOf ( "501-8100" ) == -1  ){

//                 alert ( 'Cookie-Eintrag gefiltert: ' + external_messageid );

                   return ( true );
              }
         }

//              else {
//
//                   alert ( 'Cookie-Eintrag NICHT gefiltert: ' + external_messageid );
//              }
//         }



// ----- aktionen ----------------------------------------------------------------------------

         switch ( external_mode ){



             case 'add' :


                   yyyymmdd = String(fct_yyyymmdd ());
                   cookie_set_field( external_debug_mode, 'messageboard.contact.yyyymmdd' ,  yyyymmdd );

                   messageboard_eintraege_gelesen = cookie_get_field('nodebug','messageboard.eintraege.gelesen');


                   // --- doppel eintraege vermeiden

                   messageboard_eintraege_gelesen = cookie_get_field('nodebug','messageboard.eintraege.gelesen');

                   if ( messageboard_eintraege_gelesen.indexOf(external_messageid) > -1 ){
                        return ( true );
                   }



                   // --- laenge kuerzen

                   // 30.06.2003 length > 3500 

                   if ( messageboard_eintraege_gelesen.length > 2500 ){


//                      alert ( 'Aktuelle Cookie-Länge : ' + messageboard_eintraege_gelesen.length + ' wird gekürzt.'  );
//
// 30.06.2003
//                      messageboard_eintraege_gelesen = messageboard_eintraege_gelesen.substr ( 100, messageboard_eintraege_gelesen.length - 100 );
//

                        messageboard_eintraege_gelesen = messageboard_eintraege_gelesen.substr ( 1000, messageboard_eintraege_gelesen.length - 1000 );


//                      alert ( 'Aktuelle Cookie-Länge : ' + messageboard_eintraege_gelesen.length + ' WURDE gekürzt.' );



                   }


                   // --- wenn leer, !e ueberschreiben, sonst append

                   if ( messageboard_eintraege_gelesen == '!e' ){    
                        messageboard_eintraege_gelesen =  external_messageid;
                   }
                   else {
                        messageboard_eintraege_gelesen = messageboard_eintraege_gelesen + " " + external_messageid;
                   }


                   cookie_set_field( external_debug_mode, 'messageboard.eintraege.gelesen' ,  messageboard_eintraege_gelesen );

                   break;


             case 'check' :



                   if ( document.cookie == ""){
                        return ( false );
                   }      

                   last_contact_yyyymmdd = cookie_get_field('nodebug','messageboard.contact.yyyymmdd');

                   if ( last_contact_yyyymmdd == '!e' ){
                        return ( false );
                   }      



                   // --- dieser beitrag heute gelesen

                   messageboard_eintraege_gelesen = cookie_get_field('nodebug','messageboard.eintraege.gelesen');

                   // alert ( "external_messageid : " + external_messageid + "\n" +
                   //         "messageboard_eintraege_gelesen : " + messageboard_eintraege_gelesen + "\n" );


                   if ( messageboard_eintraege_gelesen.indexOf(external_messageid) > -1 ){

                        return ( true );
                   }



                   // alert ( "last_contact_yyyymmdd : " + last_contact_yyyymmdd + "\n" +
                   //         "message_date_yyyymmdd : " + message_date_yyyymmdd + "\n" );



                   // --- wenn message juenger als 1 Monat : immer NEU

                   if ((last_contact_yyyymmdd - 100 ) < message_date_yyyymmdd ){
                        return ( false );
                   }  




                   return ( true );

                   break;






             default :

                  alert ( "cookie_messageboard_eintrag_heute_anzeigt : unbekannter mode'" + external_mode_name );
                  return;

          } 














}








// ----- Cookie uebergeordnete Abfragen -----------------------------------------------------------------------------
//
//       cookie codieren und setzen
//


function cookie_query ( external_debug_mode, external_cookie_query_name ) {


         



// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90009 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90009" );
         }      


// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert  ( "DEBUG TRACE INTO > cookie_query ()" );
         }      




// ----- umsetzen cookie name + klassifizieren -----------------------------------------------

         switch ( external_cookie_query_name ){



             case 'erstmaliger_site_aufruf' :

                   if ( document.cookie == ""){
                        return ( true );
                   }      
                   else {
                        return ( false );
                   }      

                   break;



             case 'username_existiert' :

                   if ( document.cookie == ""){
                        return ( false );
                   }      

                   if ( cookie_get_field('nodebug','user.name') != '!e' ){
                        return ( true );
                   }      
                   else {
                        return ( false );
                   }      


                   break;


             case 'homepage_heute_bereits_besucht' :

                   if ( document.cookie == ""){
                        return ( false );
                   }      

                   
                   last_contact_yyyymmdd = cookie_get_field('nodebug','user.contact.yyyymmdd');

                   if ( last_contact_yyyymmdd == '!e' ){
                        return ( false );
                   }      


                   if ( last_contact_yyyymmdd != fct_yyyymmdd() ){
                        return ( false );
                   }      

                   return ( true );

                   break;




             case 'messageboard_eintraege_gelesen_length' :

                   if ( document.cookie == ""){
                        return ( false );
                   }      

                   if ( cookie_get_field('nodebug','messageboard.eintraege.gelesen') == '!e' ){
                        return ( 0 );
                   }      


                   messageboard_eintraege_gelesen = cookie_get_field('nodebug','messageboard.eintraege.gelesen');


                   return ( messageboard_eintraege_gelesen.length );


                   break;




             default :

                  alert ( "unbekannter cookie query name '" + external_cookie_query_name );
                  return;

          } 














}









// ----- Cookie uebergeordnete Abfragen -----------------------------------------------------------------------------
//
//       cookie codieren und setzen
//


function cookie_check_field_initial ( external_debug_mode, external_cookie_field_name ) {


         



// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90010 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90010" );
         }      


// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert  ( "DEBUG TRACE INTO > cookie_check_field_initial ()" );
         }      




// ----- check cascade ------------------------------------------------------------------------

         if ( document.cookie == ""){
              return ( true );
         }      


         if ( cookie_get_field( external_debug_mode, external_cookie_field_name ) == '!e' ){
              return ( true );
         }      
         else {
              return ( false );
         }      






          return ( false );


}









// ----- Cookie setzen -----------------------------------------------------------------------------
//
//       cookie codieren und setzen
//


function cookie_set_field ( external_debug_mode, external_cookie_field_name, external_cookie_field_value ) {


         var internal_cookie_field_name;
         var internal_cookie_expires;
         var internal_cookie_field_value;
         var internal_cookie_path    = "/";
         var internal_cookie_domaine = cnst_url();
         var internal_cookie_expires;
         var internal_cookie_full_value;



// ----- debug ------------------------------------------------------------------------

//       alert  ( "ERROR-JS-90001 - external_cookie_field_value '" + external_cookie_field_value + "'" );


// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90001 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90001" );
         }      


// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert  ( "DEBUG TRACE INTO > cookie_set_field ()" );
         }      




// ----- master init -------------------------------------------------------------------------

         if ( document.cookie == ""){
              cookie_master_init ( external_debug_mode );
         }      



// ----- umsetzen cookie name + klassifizieren -----------------------------------------------

         switch ( external_cookie_field_name ){



             // ----- Verfall : nach Internet Session ----------

             case 'benutzerbetreuung.tasks' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'after_internet_session' );
                   internal_cookie_field_index  =  3;
                   break;


             case 'test.tasks' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'after_internet_session' );
                   internal_cookie_field_index  =  4;
                   break;


             case 'user.loginflag' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'after_internet_session' );
                   internal_cookie_field_index  =  5;
                   break;




             // ----- Verfall : nach 1 Monat ----------

             case 'messageboard.eintraege.gelesen' :

                   internal_cookie_name         = 'C2C.002';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'in_1_monat' );
                   internal_cookie_field_index  =  3;
                   break;



             // ----- Verfall : never - ID 003 --------

             case 'user.name' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  3;
                   break;


             case 'user.password' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  4;
                   external_cookie_field_value  =  external_cookie_field_value;
                   break;


             case 'user.berechtigungen' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  5;
                   external_cookie_field_value  =  external_cookie_field_value;
                   break;


             case 'search.001.inclusion' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  6;
                   break;


             case 'search.001.exclusion' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  7;
                   break;

             case 'flags.umfragen.allgemein' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  8;
                   break;


             case 'user.contact.yyyymmdd' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  9;
                   break;


             case 'user.contact.anzahl' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  10;
                   break;


             case 'messageboard.contact.yyyymmdd' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  11;
                   break;


             case 'messageboard.eintraege.anzahl_angelegt' :
 
                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  12;

                   if ( isNaN ( external_cookie_field_value )){
                        alert ( "cookie field : messageboard.eintraege.anzahl_angelegt .... kein numerischer Wert '" + external_cookie_field_value );
                   }
                   external_cookie_field_value = String ( external_cookie_field_value );

                   break;


             case 'messageboard.eintraege.anzahl_geantwortet' :
 
                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  13;

                   if ( isNaN ( external_cookie_field_value )){
                        alert ( "cookie field : messageboard.eintraege.anzahl_geantwortet .... kein numerischer Wert '" + external_cookie_field_value );
                   }
                   external_cookie_field_value = String ( external_cookie_field_value );

                   break;


             case 'user.email' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  14;
                   external_cookie_field_value  =  external_cookie_field_value;
                   break;


             case 'user.klasse' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_expires      =  fmt_date2expiredate ( external_debug_mode , 'never' );
                   internal_cookie_field_index  =  15;
                   external_cookie_field_value  =  external_cookie_field_value;
                   break;






             default :

                  alert ( "unbekannter cookie field name '" + external_cookie_field_name );
                  return;

          } 




// ----- cookie zugriff --------------------------------------------------------------------


         if ( GetCookie ( external_debug_mode, internal_cookie_name ) == null ){
              cookie_selectiv_init ( external_debug_mode, internal_cookie_name, internal_cookie_expires );
         }
                  
         internal_cookie_full_value   =  GetCookie ( external_debug_mode, internal_cookie_name );



//       Debug 

         if ( internal_cookie_full_value == false ){

              alert  ( "Cookie I003 error - internal_cookie_full_value = " + internal_cookie_full_value );

              cookie_selectiv_init ( external_debug_mode, internal_cookie_name, internal_cookie_expires );
         }      

         if ( internal_cookie_full_value == "false" ){

              alert  ( "Cookie I004a error - internal_cookie_full_value = " + internal_cookie_full_value );

              cookie_selectiv_init ( external_debug_mode, internal_cookie_name, internal_cookie_expires );

              alert  ( "Cookie I004b error - internal_cookie_full_value = " + internal_cookie_full_value );
         }      






 
         internal_cookie_full_value   =  cookie_insert_value_into_field (
                                                          external_debug_mode,
                                                          internal_cookie_name, 
                                                          external_cookie_field_name,
                                                          internal_cookie_full_value, 
                                                          internal_cookie_field_index,
                                                          external_cookie_field_value );

         if ( internal_cookie_full_value == false ){
              alert  ( "Cookie I005 error - internal_cookie_full_value = " + internal_cookie_full_value );
         }      
         if ( internal_cookie_full_value == "false" ){
              alert  ( "Cookie I006 error - internal_cookie_full_value = " + internal_cookie_full_value );
         }      




          SetCookie ( external_debug_mode,
                               internal_cookie_name,
                               internal_cookie_full_value,
                               internal_cookie_expires,
                               internal_cookie_path,
                               internal_cookie_domaine );











}
















// ----- Cookie setzen -----------------------------------------------------------------------------
//
//       cookie codieren und setzen
//



function cookie_get_field ( external_debug_mode, external_cookie_field_name ) {



         var internal_cookie_field_name;
         var internal_cookie_expires;
         var internal_cookie_field_value;
         var internal_cookie_path    = "/";
         var internal_cookie_domaine = cnst_url();
         var internal_cookie_expires;
         var internal_cookie_full_value;





// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90002 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90002" );
         }      


// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert  ( "DEBUG TRACE INTO > cookie_get_field ()" );
         }      




// ----- master init -------------------------------------------------------------------------

         if ( document.cookie == ""){
              cookie_master_init ( external_debug_mode );
         }      



// ----- umsetzen cookie name + klassifizieren -----------------------------------------------

         switch ( external_cookie_field_name ){



             // ----- Verfall : nach Internet Session ----------

             case 'benutzerbetreuung.tasks' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_field_index  =  3;
                   break;


             case 'test.tasks' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_field_index  =  4;
                   break;


             case 'user.loginflag' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_field_index  =  5;
                   break;





             // ----- Verfall : nach 1 Monat ----------

             case 'messageboard.eintraege.gelesen' :

                   internal_cookie_name         = 'C2C.002';
                   internal_cookie_field_index  =  3;
                   break;




             // ----- Verfall : never - ID 003 --------

             case 'user.name' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  3;
                   break;

             case 'user.password' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  4;
                   break;

             case 'user.berechtigungen' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  5;
                   break;

             case 'search.001.inclusion' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  6;
                   break;

             case 'search.001.exclusion' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  7;
                   break;


             case 'flags.umfragen.allgemein' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  8;
                   break;

             case 'user.contact.yyyymmdd' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  9;
                   break;

             case 'user.contact.anzahl' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  10;
                   break;


             case 'messageboard.contact.yyyymmdd' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  11;
                   break;


             case 'messageboard.eintraege.anzahl_angelegt' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  12;
                   break;


             case 'messageboard.eintraege.anzahl_geantwortet' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  13;
                   break;


             case 'user.email' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  14;
                   break;

             case 'user.klasse' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  15;
                   break;









             case 'C2C.000.ende.marke' :

                   internal_cookie_name         = 'C2C.000';
                   internal_cookie_field_index  =  30 - 1;
                   break;


             case 'C2C.002.ende.marke' :

                   internal_cookie_name         = 'C2C.002';
                   internal_cookie_field_index  =  30 - 1;
                   break;


             case 'C2C.003.ende.marke' :

                   internal_cookie_name         = 'C2C.003';
                   internal_cookie_field_index  =  30 - 1;
                   break;





             default :

                  alert ( "unbekannter cookie field name '" + external_cookie_field_name );
                  return;

          } 




// ----- cookie zugriff --------------------------------------------------------------------


         if ( GetCookie ( external_debug_mode, internal_cookie_name ) == null ){
              cookie_selectiv_init ( external_debug_mode, internal_cookie_name, fmt_date2expiredate ( external_debug_mode, 'in_1_stunde' ));
         }
         

         internal_cookie_full_value   =  GetCookie ( external_debug_mode, internal_cookie_name );
         internal_cookie_field_value  =  cookie_extract_field_value ( external_debug_mode, internal_cookie_name, external_cookie_field_name, internal_cookie_full_value, internal_cookie_field_index );




// ----- numerische konvertierung :  !e -> 0 ------------------------------------------------


         switch ( external_cookie_field_name ){

                case 'user.contact.anzahl' :
                case 'messageboard.eintraege.anzahl_angelegt' :
                case 'messageboard.eintraege.anzahl_geantwortet' :

                      if ( internal_cookie_field_value == '!e' ){         
                           internal_cookie_field_value  = '0';
                      }

                      internal_cookie_field_value = Number ( internal_cookie_field_value );
                      
                      break;


         }









         return ( internal_cookie_field_value );


}













// ----- feldwert in value string einsetzen -----------------------------------------------------------------------------
//


function cookie_extract_field_value ( external_debug_mode, external_cookie_name, external_cookie_field_name, external_cookie_full_value, external_cookie_field_index ) {





         var internal_cookie_full_value = unescape ( external_cookie_full_value );
         var internal_field_values      = internal_cookie_full_value.split(/;/);
         var internal_result;

         var check_max_items            = 30;
         var check_delimiter_offset     =  1;

         if ( navigator.appName == "Netscape" ){
             
              check_max_items        = check_max_items + 1;
              check_delimiter_offset = 2;

         }






// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90003 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90003" );
         }      



// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert  ( "DEBUG TRACE INTO > cookie_extract_field_value ()" );
         }      



// ----- plausi :  idx  + cast --------------------

         if( isNaN ( external_cookie_field_index ) == true ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist keine Zahl!");

             return false;
         }

         internal_cookie_field_index = parseInt (external_cookie_field_index);



         if( external_cookie_field_index < 0 ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist < 0!");

             return false;
         }



         if( external_cookie_field_index > check_max_items -1 ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist > " + check_max_items + " - 1 !");

             return false;
         }


// ----- plausi :  idx value ----------------------------

         if( internal_field_values.length != check_max_items ) {

             alert ( "cookie I001 error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "internal_field_values.length != " + check_max_items + " : entry missing or too much - found :" + internal_field_values.length );

             return false;
         }


// ----- plausi :  end delimiter ----------------------------

         if( internal_field_values [check_max_items-check_delimiter_offset] != '!e' ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name        + "\n\n" +
                     "external_cookie_field_name : "             + external_cookie_field_name  + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index + "\n\n" +
                     "end delimiter != !e - falsches Ende" );

             return false;
         }



// ----- debug ----------------------------

//         for ( i=0;i<internal_field_values.length;i++ ){
//
//
//             alert ( "debug :\n\nexternal_cookie_name : " + external_cookie_name        + "\n\n" +
//                     "external_cookie_field_name : "             + external_cookie_field_name  + "\n\n" +
//                     "external_cookie_field_index : "            + external_cookie_field_index + "\n\n" +
//                     "index : " + i + " wert : " + internal_field_values [i] );
//         }




// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert ( "debug return wert : " + internal_field_values [external_cookie_field_index] );
         }      


// ----- cast + concatenate ----------------------------

         return ( decrypt ( 3, internal_field_values [external_cookie_field_index] ));


}










// ----- feldwert in value string einsetzen -----------------------------------------------------------------------------
//


function cookie_insert_value_into_field ( external_debug_mode, external_cookie_name, external_cookie_field_name, external_cookie_full_value, external_cookie_field_index, external_cookie_field_value ) {





         var internal_cookie_full_value = unescape ( external_cookie_full_value );
         var internal_field_values      = internal_cookie_full_value.split(/;/);
         var internal_result;

         var check_max_items            = 30;
         var check_delimiter_offset     =  1;

         if ( navigator.appName == "Netscape" ){
             
              check_max_items        = check_max_items + 1;
              check_delimiter_offset = 2;

          //  internal_field_values.pop ();   // das letzte + leere Element aus Array entfernen
          //  alert ( internal_field_values );
          //  alert (1);


         }




// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90004 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90004" );
         }      


// ----- debug ------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
   
              alert ( "debug werte : " + external_cookie_full_value );
              alert ( "debug werte : " + internal_cookie_full_value );
         }



// ----- plausi :  idx  + cast --------------------

         if( isNaN ( external_cookie_field_index ) == true ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist keine Zahl!");

             return false;
         }

         internal_cookie_field_index = parseInt (external_cookie_field_index);




         if( external_cookie_field_index < 0 ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist < 0!");

             return false;
         }



         if( external_cookie_field_index > check_max_items -1 ) {

             alert ( "cookie error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "external_cookie_field_index : " + external_cookie_field_index + " ist > " + check_max_items + " - 1 !");

             return false;
         }



// ----- plausi :  idx value ----------------------------

         if( internal_field_values.length != check_max_items ) {

             alert ( "cookie ERROR-JS-90011 error :\n\nexternal_cookie_name : " + external_cookie_name         + "\n\n" +
//                   "external_cookie_field_name : "             + external_cookie_field_name   + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index  + "\n\n" +
                     "internal_field_values.length != " + check_max_items + " : entry missing or too much - found :" + internal_field_values.length + "\n\n" + 
                     "external_cookie_full_value : " + external_cookie_full_value );

             return "ERROR-JS-90011";
         }


// ----- plausi :  end delimiter ----------------------------

         if( internal_field_values [check_max_items - check_delimiter_offset] != '!e' ) {

             alert ( "cookie ERROR-JS-90012 error :\n\nexternal_cookie_name : " + external_cookie_name        + "\n\n" +
                     "external_cookie_field_name : "             + external_cookie_field_name  + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index + "\n\n" +
                     "end delimiter != !e - falsches Ende" );

             return "ERROR-JS-90012";
         }



// ----- debug ----------------------------


         if ( external_debug_mode == "debug" ){
   
              for ( i=0;i<internal_field_values.length;i++ ){


                    alert ( "debug :\n\nexternal_cookie_name : " + external_cookie_name        + "\n\n" +
                     "external_cookie_field_name : "             + external_cookie_field_name  + "\n\n" +
                     "external_cookie_field_index : "            + external_cookie_field_index + "\n\n" +
                     "index : " + i + " wert : " + internal_field_values [i] );
              }
         }





// ----- debug ---------------------------------------------------------


         if ( external_debug_mode == "debug" ){
   
              alert ( "debug : neuer feld wert : " + external_cookie_field_value );
         }




// ----- konvertieren --------------------------------------------------

         if ( external_cookie_field_value == "" ){
              external_cookie_field_value  = "!e";
         }




// ----- cast + encrypt + concatenate ----------------------------

         internal_field_values [external_cookie_field_index] = encrypt ( 3, external_cookie_field_value );


         if ( external_debug_mode == "debug" ){

              for ( i=0;i<internal_field_values.length;i++ ){

                    alert ( "debug :\n\nexternal_cookie_name : " + external_cookie_name        + "\n\n" +
                            "external_cookie_field_name : "      + external_cookie_field_name  + "\n\n" +
                            "external_cookie_field_index : "     + external_cookie_field_index + "\n\n" +
                            "index : " + i + " wert : "          + internal_field_values [i] );
                    }
         }



         internal_result = internal_field_values.join(";");




// ----- debug ----------------------------


         if ( external_debug_mode == "debug" ){
   
              alert ( "debug werte : " + internal_result );
         }



         return ( internal_result );


}












// ----- Cookie Master Init -----------------------------------------------------------------------------
//
//       cookie init
//


function cookie_master_init ( external_debug_mode ) {


         
         var internal_cookie_expires;
         var internal_cookie_value   = "!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;";
         var internal_cookie_path    = "/";
         var internal_cookie_domaine = cnst_url();
         var internal_cookie_expires;



                    

// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90005 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90005" );
         }      



              


// ----- Datenstrom :  client to client cookies -----------------------------------------------
//
//                     - diese Art von Cookies wird vom Browser erzeugt und eingelesen
//
//


         SetCookie ( external_debug_mode,
                               'C2C.000', internal_cookie_value,
                                fmt_date2expiredate ( external_debug_mode , 'after_internet_session'),
                                internal_cookie_path,
                                internal_cookie_domaine );


         SetCookie ( external_debug_mode,
                               'C2C.001', internal_cookie_value,
                                fmt_date2expiredate ( external_debug_mode , 'in_1_stunde'),
                                internal_cookie_path,
                                internal_cookie_domaine );


         SetCookie ( external_debug_mode,
                               'C2C.002', internal_cookie_value,
                                fmt_date2expiredate ( external_debug_mode , 'in_1_monat'),
                                internal_cookie_path,
                                internal_cookie_domaine );


         SetCookie ( external_debug_mode,
                               'C2C.003', internal_cookie_value,
                                fmt_date2expiredate ( external_debug_mode , 'never'),
                                internal_cookie_path,
                                internal_cookie_domaine );





// ----- Datenstrom :  client to server cookies -----------------------------------------------
//
//                     - diese Art von Cookies wird vom Browser erzeugt und vom Server abgeholt
//
//

         internal_cookie_expires =  fmt_date2expiredate ( external_debug_mode , 'in_1_monat' );

         SetCookie ( external_debug_mode,
                               'C2S.000', internal_cookie_value,
                                internal_cookie_expires,
                                internal_cookie_path,
                                internal_cookie_domaine );






// ----- Datenstrom :  server to client cookies -----------------------------------------------
//
//                     - diese Art von Cookies wird vom Server erzeugt und vom Client eingelesen
//
//

         internal_cookie_expires =  fmt_date2expiredate ( external_debug_mode , 'never' );

         SetCookie ( external_debug_mode,
                               'S2C.000', internal_cookie_value,
                                internal_cookie_expires,
                                internal_cookie_path,
                                internal_cookie_domaine );






// ----- debug ----------------------------

         if ( external_debug_mode == "debug" ){
   
              alert ( "debug : master init durchgeführt" );

         }


}





// ----- Cookie Master Init -----------------------------------------------------------------------------
//
//       cookie init
//


function cookie_selectiv_init ( external_debug_mode, external_cookie_name, external_cookie_expires ) {


         
         var internal_cookie_expires;
         var internal_cookie_value   = "!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;!e;";
         var internal_cookie_path    = "/";
         var internal_cookie_domaine = cnst_url();
         var internal_cookie_expires;



// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90006 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90006" );
         }      
                    


// ----- init cookie -----------------------------------------------
//

         SetCookie ( external_debug_mode,
                     external_cookie_name, 
                     internal_cookie_value,
                     external_cookie_expires,
                     internal_cookie_path,
                     internal_cookie_domaine );





// ----- debug ----------------------------

         if ( external_debug_mode == "debug" ){
   
              alert ( "debug : selectiver init von : " + external_cookie_name + " durchgeführt - expire date : " + external_cookie_expires + " ." );
         }








}








// ----- Cookie Master Validation -----------------------------------------------------------------------------
//
//       cookie master validation
//


function cookie_master_validation ( external_debug_mode, mode ) {




// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90007 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90007" );
         }      
                    



// ----- Start message -------
//

//       if ( mode == 'verbose' ){
//
//            alert ( "START cookie validation :  verbose mode" );
//       }



// ----- Endemarken -------
//

         if ( cookie_get_field( external_debug_mode, 'C2C.000.ende.marke' ) != '!e' ){

              alert ( "cookie error :\n\nEndemarke in C2C.000 fehlt" );
              return false;
         }


         if ( cookie_get_field( external_debug_mode, 'C2C.002.ende.marke' ) != '!e' ){

              alert ( "cookie error :\n\nEndemarke in C2C.002 fehlt" );
              return false;
         }

         if ( cookie_get_field( external_debug_mode, 'C2C.003.ende.marke' ) != '!e' ){

              alert ( "cookie error :\n\nEndemarke in C2C.003 fehlt" );
              return false;
         }



// ----- Start message -------
//

         if ( mode == 'verbose' ){

              alert ( "ENDE cookie validation" );
         }





}















// ----- LowLevel : Cookie Wert ermitteln -----------------------------------------------------------------------------
//
//
//       Auslesen eines (möglicherweise) existierendes Cookie auf dem Client-Rechner
//       und Rückgabe des Wertes
//


function GetCookie ( external_debug_mode, name) {




// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90001 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90001" );
         }      



         var arg = name + "=";
         var alen = arg.length;
         var clen = document.cookie.length;
         var i = 0;
         while (i < clen) {
                var j = i + alen;
                if (document.cookie.substring(i, j) == arg)
//                  return ( decrypt ( 13, getCookieVal (j)));
                    return getCookieVal (j);

                i = document.cookie.indexOf(" ", i) + 1;
                if (i == 0) break;
         }
         return null;
}





// ----- LowLevel : Cookie Wert per Index einlesen ---------------------------------------------------------------------
//
//
//       wird verwendet von GetCookie ermittelt, das den erforderlichen Wert für die Variable offset ermittelt
//       und ruft dann getCookieVal auf
//


function getCookieVal (offset) {

         var endstr = document.cookie.indexOf (";", offset);
         if (endstr == -1)
         endstr = document.cookie.length;
         return unescape(document.cookie.substring(offset, endstr));
}





// ----- LowLevel : Fix date : Hilfsfunktion - wenn expires nicht uebergeben ---------------------------------------------------------------------
//
//
//       wird verwendet von SetCookie verwendet
//


function FixCookieDate (date) { 
    var base = new Date(0); 
    var skew = base.getTime(); // dawn of (Unix) time - should be 0 
    if (skew > 0) // Except on the Mac - ahead of its time 
    date.setTime (date.getTime() - skew); 
}





// ----- LowLevel : Cookie setzen -------------------------------------------------------------------------------------
//



function SetCookie ( external_debug_mode, name, value, expires, path, domain) {

   var argv = SetCookie.arguments;
   var argc = SetCookie.arguments.length;



   var secure = (argc > 5) ? argv[5] : false;

   if (expires!=null) FixCookieDate(expires);






// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90001 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90001" );
         }      



// ----- chiffrieren ------------------------------------------------------------------------


//       value = encrypt ( 13, value );






         document.cookie = name + "=" + escape (value) +
                        "; expires="  + expires        +
                        "; path="     + path           ;





// ----- debug -----------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
   
              alert ( "cookie gesetzt - name=" + name + "\n"       + 
                      "value=" + value + "\n" +
                      "expires=" + expires + "\n" +
                      "path=" + path + "\n"    );
         }




}









// ----- low level : expire date -----------------------------------------------------------------------------
//
//       verfalldatum im cookie format
//


function fmt_date2expiredate ( external_debug_mode, expire_expression ) {


         var fmt = "#n/a";




// ----- debug plausi ------------------------------------------------------------------------

         if ( external_debug_mode != "debug" && external_debug_mode != "nodebug" ){
              alert  ( "ERROR-JS-90008 - unbekannter debug mode '" + external_debug_mode + "'" );
              return ( "ERROR-JS-90008" );
         }      
                    



         var jetzt_in_1_stunde = new Date();
         jetzt_in_1_stunde.setHours((jetzt_in_1_stunde.getHours() + 1)); // ..da getHour nur die Werte 0 - 23 haben darf...
         var expires_in_1_stunde = jetzt_in_1_stunde.toGMTString();

         var jetzt_in_8_stunden = new Date();
         jetzt_in_8_stunden.setHours((jetzt_in_8_stunden.getHours() + 8)); // ..da getHour nur die Werte 0 - 23 haben darf...
         var expires_in_8_stunden = jetzt_in_8_stunden.toGMTString();


         var jetzt_in_1_monat = new Date();
         jetzt_in_1_monat.setMonth((jetzt_in_1_monat.getMonth() + 1)); // ..da getMonth nur die Werte 0 - 11 haben darf...
         var expires_in_1_monat = jetzt_in_1_monat.toGMTString();


         var expires_never = "Wed, 12 Jan 2039 17:00.00 UTC";







         switch ( expire_expression ){


             case 'after_internet_session' :

                   fmt = "";

// zum debuggen
//                 fmt =  expires_in_1_stunde;

// cookie fehler bei ""

                   fmt =  expires_in_8_stunden;


                   break;


             case 'in_1_stunde' :

                   fmt = expires_in_1_stunde;
                   break;


             case 'in_1_monat' :

                   fmt = expires_in_1_monat;
                   break;

             case 'never' :

                   fmt = expires_never;
                   break;



             default :

                  alert ( "unbekannter expire_expression " + expire_expression );
                  return;

          } 



// ----- debug -------------------------------------------------------------------------------

         if ( external_debug_mode == "debug" ){
              alert ( "debug : expire : " + expire_expression  + " ergibt :  " + fmt );
         }      






          return ( fmt );

}





// ----- Verschluesselung ----------------------------------------------------------------------------------
//
//       codieren / decodieren
//


  var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  var alphaLen =  alphabet.length;


  function encrypt (key, text) {






// --- filter : Endemarke nicht behandeln ---

       if ( text == "!e" ){
            return text;
       }    







    var i, n    = 0;
    var chiffre = "";

    key  = key % alphaLen;

//    text = text.toLowerCase();

    for (i=0; i < text.length; i++) {
        n = alphabet.indexOf(text.charAt(i));
        if (n >= 0)
           chiffre = chiffre + alphabet.charAt((n+key) % alphaLen);
        else
           chiffre = chiffre + text.charAt(i);
    }



//  alert ( "debug : encrypted : " + text + " zu : " + chiffre );


    return chiffre;
  } 






  function decrypt (key, chiffre) {





// --- filter : Endemarke nicht behandeln ---

       if ( chiffre == "!e" ){
            return chiffre;
       }    






    var i, n = 0;
    var text = "";

    key     = key % alphaLen;

//  chiffre = chiffre.toLowerCase();

    for (i=0; i < chiffre.length; i++) {

//  n = alphabet.indexOf(text.charAt(i));

    n = alphabet.indexOf(chiffre.charAt(i));


//      alert ( "n : " + n );

        if ( n >= 0){

             text = text + alphabet.charAt((alphaLen+(n-key)) % alphaLen);
        }
        else {
             text = text + chiffre.charAt(i);
        }
    }


//  alert ( "debug : decrypted : " + chiffre + " zu : " + text );



    return text;
  } 




