  //<![CDATA[
  var already_submitted      = false;
  var foreign_logins_waiting = 0;
  
  var error_msg = new Object();
  error_msg['invalid_nick']   = new String("Der Benutzername muss aus mindestens 4 Buchstaben bestehen und darf keine Sonder-/Leerzeichen enthalten.");
  error_msg['invalid_pass']   = new String("Das angegebene Passwort muss mindestens aus 4 Zeichen bestehen.");
  error_msg['internal_error'] = new String("Interner Fehler. Bitte versuchen sie die Seite neu zu laden.");
  

function check_login(element) {
  
  if (element.id=="nick") {
  
    if (element.value.length > 0) {
      if (element.value.length > 3 && !element.value.match(/^[_a-z0-9]{4,15}$/i)) {
        element.className = "error";
        return false;
      } else if (element.value.match(/^[_a-z0-9]{4,15}$/i)) {
        element.className = "ok";
        /* new error style:
        var error = dom.byId();
        error.style.display = "none";
        */
        hide_error("error_element_nick");
        return true;
      } else {
        element.className = "";
        return false;
      }
    } else {
      element.className = "";
      return false;
    }
  }

  if (element.id=="passwd") {
      if (element.value.length > 3) {
         element.className = "ok";
         /* new error style:
         var error = dom.byId();
         error.style.display = "none";
         */
         hide_error("error_element_passwd");
         return true;
      } else {
        element.className = "";
        return false;
      }
  }
  
}

  
  function process_page() {
    if (already_submitted) return false;
    already_submitted = true;

    var nick          = dom.byId("nick");
    var nick_val      = nick.value;
    
    var passwd        = dom.byId("passwd");
    var passwd_val    = passwd.value;
    
    var autologin     = dom.byId("autologin");
    var autologin_val = autologin.value;

    var https         = dom.byId("https");
    var https_val     = https.value;
    
    var redirect      = dom.byId("redirect");
    var redirect_val  = redirect.value;    

    var community_only      = dom.byId("community_only");
    var community_only_val  = community_only.value;    
    
    var login_origin_val = '';
    if (dom.byId("login_origin")) {
      login_origin_val = dom.byId("login_origin").value;
    } 

    if (!nick_val)            nick_val     = '';
    if (!passwd_val)          passwd_val   = '';
    if (!https_val)           https_val    = '';
    if (!redirect_val)        redirect_val = '';
    if (!community_only_val)  community_only_val = '';
    if (!login_origin_val)    login_origin_val = '';
    if (autologin.checked != true) {autologin_val = 'nein';} else {autologin_val = 'ja'}

    if (nick.className=="ok" && passwd.className=="ok") {
      var post = 'cmd=login&nick='+nick_val+'&passwd='+escape(passwd_val)+'&https='+https_val+'&autologin='+autologin_val+'&redirect='+redirect_val+'&community_only='+community_only_val+'&login_origin='+login_origin_val;
      new ajax('/login/xml.fcgi', {postBody: post, onComplete: processed_page, onError: error_page});
    } else {
      already_submitted = false;
    }
  }

  function processed_page(request) {
    var tr_xml = dom.treeXML(request.responseXML.documentElement);
    
    if (tr_xml.Ok[0].data == "1") {
      var return_href; 
      if (tr_xml.Redirect) {
        return_href = tr_xml.Redirect[0].data;
      } else {
        return_href = '/';        
      }
      if (tr_xml.ForeignLogin) {

        foreign_logins_waiting = tr_xml.ForeignLogin.length;
        var preloader = new ImagePreloader(tr_xml.ForeignLogin, continue_login, return_href);

      } else {
        window.location.href = return_href;
      }
    } else {
      show_error("error_element_"+tr_xml.ErrorElement[0].data, tr_xml.Error[0].data);
    }
    dom.byId("button_login_validation").style.cursor = "pointer";
    already_submitted = false;
  }
  
  function continue_login(aImages, nImages, return_href) {
    if ( nImages != foreign_logins_waiting ) {
      // Images didnt load properly
      if (dom.byId("foreign_login")) {
        dom.byId("foreign_login").innerHTML = '<b>Incomplete Login.</b>';
      }
    }
    window.location.href = return_href;
  }



  function error_page() {
    show_error("error_element_"+"page",error_msg['internal_error']);
    dom.byId("button_login_validation").style.cursor = "pointer";
    already_submitted = false;
  }  

  
  function save_login () {
    
    var nick   = dom.byId("nick");
    var passwd = dom.byId("passwd");

    if (!check_login(nick)) {
      show_error("error_element_nick",error_msg['invalid_nick']);
    }
    if (!check_login(passwd)) {
      show_error("error_element_passwd",error_msg['invalid_pass']);
    }
    
    hide_error("error_element_page");
    
    process_page();
  }


function ImagePreloader(imagesrcs, callback, return_href) {

   // store the call-back
   this.callback = callback;
   
   // store my return link
   this.return_href = return_href;
   
   // initialize internal state.
   this.nLoaded = 0;
   this.nProcessed = 0;
   this.aImages = new Array;

   // record the number of images.
   this.nImages = imagesrcs.length;
 
   // for each image, call preload()
   for ( var i = 0; i < imagesrcs.length; i++ ) 
      this.preload(imagesrcs[i].data);
}

ImagePreloader.prototype.preload = function(image) {
   // create new Image object and add to array
   var oImage = new Image;
   this.aImages.push(oImage);
   
   // set up event handlers for the Image object
   oImage.onload = ImagePreloader.prototype.onload;
   oImage.onerror = ImagePreloader.prototype.onerror;
   oImage.onabort = ImagePreloader.prototype.onabort;
   
   // assign pointer back to this.
   oImage.oImagePreloader = this;
   oImage.bLoaded = false;
   
   // assign the .src property of the Image object
   oImage.src = image;
}

ImagePreloader.prototype.onComplete = function() {
   this.nProcessed++;
   if ( this.nProcessed == this.nImages ) {
      this.callback(this.aImages, this.nLoaded, this.return_href);
   }
}

ImagePreloader.prototype.onload = function() {
   this.bLoaded = true;
   this.oImagePreloader.nLoaded++;
   this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onerror = function() {
   this.bError = true;
   this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onabort = function() {
   this.bAbort = true;
   this.oImagePreloader.onComplete();
}




  //]]>