
//==================================================================================
//==================================================================================
//
// SessionParam-MODUL Projektbezogene Methoden und Objekte
// OO-PROGRAMMIERUNG
// AUTOR: DF
// ERSTELLT: 31.01.2007
//
// Dieses Modul erfordert die Module tools.js und ajax.js
//
//==================================================================================
//==================================================================================

var undefined;

function SessionParam(id) {
  this.id;
  this.token = undefined;
  this.state = undefined;
  this.data = {};
  
  this._setID(id);
}

SessionParam.prototype._setID = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("SessionParam->_setID: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("SessionParam->_setID: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}  

SessionParam.prototype.setToken = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("SessionParam->setToken: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("SessionParam->setToken: Argument str ist nicht vom Typ String!");
  }
  this.token = str;
} 

SessionParam.prototype.setState = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("SessionParam->setState: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("SessionParam->setState: Argument str ist nicht vom Typ String!");
  }
  this.state = str;
} 

SessionParam.prototype.setData = function (obj) {
  if (arguments.length != 1) {
    focus();
    throw new Error("SessionParam->setState: Falsche Anzahl von Argumenten!");
  }
  if (typeof obj != "object") {
    focus();
    throw new Error("SessionParam->setState: Argument str ist nicht vom Typ Object!");
  }
  this.data = obj;
} 

SessionParam.prototype.getData = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("SessionParam->getData: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("SessionParam->getData: Argument str ist nicht vom Typ String!");
  }
  return this.data[str];
} 

SessionParam.prototype.createSessionToken = function (url, cookieName) {
  if (arguments.length != 1 && arguments.length != 2) {
    focus();
    throw new Error("SessionParam->createSessionToken: Falsche Anzahl von Argumenten!");
  }
  if (typeof url != "string") {
    focus();
    throw new Error("SessionParam->createSessionToken: Argument url ist nicht vom Typ String!");
  }
  if (! window.Ajax){
    focus();
    throw new Error("SessionParam->createSessionToken: Kein Modul ajax.js installiert!!!");
  }
  if (! window.Tools){
    focus();
    throw new Error("SessionParam->createSessionToken: Kein Modul tools.js installiert!!!");
  }
  var req = Ajax.createInstance();
  req.setMethod('GET');
  req.setURL(url);
  var ajIDX = new String(req.id);
  var spIDX = new String(this.id);
  var _callback = function() {
    if (Ajax.getInstance(ajIDX).getReadyState() == 4){
      var str = new String(Ajax.getInstance(ajIDX).getResponseText());
      //alert('von createSessionToken = ' + str);
      var xml = Ajax.getInstance(ajIDX).getXML(str).getElementsByTagName('response').item(0);
      for (var i=0; i<xml.childNodes.length; i++){
        var child = xml.childNodes[i];
        if (child.nodeType == 1){
          if(child.nodeName.toLowerCase() == 'state'){
            SessionParam.getInstance(spIDX).setState(child.firstChild.nodeValue);
          }
          if(child.nodeName.toLowerCase() == 'data'){
            var _hash = {};
            for (var h=0; h<child.childNodes.length; h++){
              var subCild = child.childNodes[h];
              if(subCild.nodeName.toLowerCase() == 'parameter'){
                _hash[subCild.getAttribute('name').toLowerCase()] = subCild.firstChild.nodeValue;
              }
            }
            SessionParam.getInstance(spIDX).setData(_hash);
          }
        }
      }
      Ajax.cursorFinished();
      //alert(SessionParam.getInstance(spIDX).getData('sptoken'));
      SessionParam.getInstance(spIDX).setToken(SessionParam.getInstance(spIDX).getData('sptoken'));
      if (SessionParam.getInstance(spIDX).token == undefined || SessionParam.getInstance(spIDX).token == ''){
        focus();
        throw new Error("SessionParam->createSessionToken: Es wurde kein token erzeugt!");
      }
      if (!cookieName){
        cookieName = 'sptoken';
      }
      //alert('cookie wird gesetzt = ' + SessionParam.getInstance(spIDX).token);
      var date = new Date((new Date().getFullYear() + 10), 11, 31);
      Tools.setCookieValue(SessionParam.getInstance(spIDX).token, cookieName, date, '', '', 'int');
      //alert('cookie wurde gesetzt = ' + Tools.getCookieValue(cookieName));     
      //alert('Ende createSessionToken = true');
      return SessionParam.getInstance(spIDX).token;
    } else {
      Ajax.cursorWait();
    }
  }
  req.setCallBackFunction(_callback);
  req.open();
  req.sendNull();
}  

SessionParam.prototype.setSessionData = function (url, returnFunc) {
  if (arguments.length != 1 && arguments.length != 2) {
    focus();
    throw new Error("SessionParam->setSessionData: Falsche Anzahl von Argumenten!");
  }
  if (typeof url != "string") {
    focus();
    throw new Error("SessionParam->setSessionData: Argument url ist nicht vom Typ String!");
  }
  if (! window.Ajax){
    focus();
    throw new Error("SessionParam->setSessionData: Kein Modul ajax.js installiert!!!");
  }
  var req = Ajax.createInstance();
  req.setMethod('GET');
  req.setURL(url);
  var ajIDX = new String(req.id);
  var spIDX = new String(this.id);
  var _callback = function() {
    if (Ajax.getInstance(ajIDX).getReadyState() == 4){
      var str = new String(Ajax.getInstance(ajIDX).getResponseText());
      //alert('von getSessionData = ' + str);
      var xml = Ajax.getInstance(ajIDX).getXML(str).getElementsByTagName('response').item(0);
      for (var i=0; i<xml.childNodes.length; i++){
        var child = xml.childNodes[i];
        if (child.nodeType == 1){
          if(child.nodeName.toLowerCase() == 'state'){
            SessionParam.getInstance(spIDX).setState(child.firstChild.nodeValue);
          }
          if(child.nodeName.toLowerCase() == 'data'){
            var _hash = {};
            for (var h=0; h<child.childNodes.length; h++){
              var subCild = child.childNodes[h];
              if(subCild.nodeName.toLowerCase() == 'parameter'){
                _hash[subCild.getAttribute('name').toLowerCase()] = subCild.firstChild.nodeValue;
              }
            }
            SessionParam.getInstance(spIDX).setData(_hash);
          }
        }
      }
      Ajax.cursorFinished();
      if (returnFunc != undefined){
        return returnFunc();
      }
    } else {
      Ajax.cursorWait();
    }
  }
  req.setCallBackFunction(_callback);
  req.open();
  req.sendNull();
}  

SessionParam.prototype.saveData = function (name, value, returnFunc) {
  if (arguments.length != 2 && arguments.length != 3) {
    focus();
    throw new Error("SessionParam->saveData: Falsche Anzahl von Argumenten!");
  }
  if (typeof name != "string") {
    focus();
    throw new Error("SessionParam->saveData: Argument name ist nicht vom Typ String!");
  }
  if (typeof value != "string") {
    focus();
    throw new Error("SessionParam->saveData: Argument value ist nicht vom Typ String!");
  }
  if (! window.Ajax){
    focus();
    throw new Error("SessionParam->saveData: Kein Modul ajax.js installiert!!!");
  }
  var _sid = CMS_SID;
  if (! _sid){
    _sid = fake;
  }
  var req = Ajax.createInstance();
  req.setMethod('POST');
  req.setURL('/cgi-bin/cms');
  req.addParameter('_SID', _sid);
  req.addParameter('_bereich', 'system');
  req.addParameter('_aktion', 'ajax_set_sessionparam');
  req.addParameter('name', name);
  req.addParameter('value', value);
  var ajIDX = new String(req.id);
  var func = function () {
    if (Ajax.getInstance(ajIDX).getReadyState() == 4){
      Ajax.cursorFinished();
      if (returnFunc != undefined){
        return returnFunc();
      } else {
        if (Ajax.getInstance(ajIDX).getStatus() == 200){
          return true;
        } else {
          return false;
        }
      }  
    } else {
      Ajax.cursorWait();
    }
  }
  req.setCallBackFunction(func);
  req.open();
  req.sendAll();
}  

SessionParam.prototype.saveDataHash = function (hash, callback, returnFunc) {
  if (arguments.length != 1 && arguments.length != 2 && arguments.length != 3) {
    focus();
    throw new Error("SessionParam->saveDataHash: Falsche Anzahl von Argumenten!");
  }
  if (typeof hash != "object") {
    focus();
    throw new Error("SessionParam->saveDataHash: Argument hash ist nicht vom Typ Object!");
  }
  if (! window.Ajax){
    focus();
    throw new Error("SessionParam->saveDataHash: Kein Modul ajax.js installiert!!!");
  }
  var _sid = CMS_SID;
  if (! _sid){
    _sid = fake;
  }
  for (var i in hash){
    var name = new String(i) + '';
    var value = new String(hash[i]) + '';
    //alert(name + ' = ' + value);
    if (callback){
      this.saveData(name, value, callback);
    } else {
      if (this.saveData(name, value) == false) {
        return alert('Beim Speichern des Parameters >> ' + name + '="' + value + '" << ist ein Fehler aufgetreten.\nBitte kontrollieren Sie Ihre Angaben.');
      }
    }
  }
  if (returnFunc != undefined){
    return returnFunc();
  }
}  

SessionParam.prototype.deleteData = function (name, returnFunc) {
  if (arguments.length != 1 && arguments.length != 2) {
    focus();
    throw new Error("SessionParam->saveData: Falsche Anzahl von Argumenten!");
  }
  if (typeof name != "string") {
    focus();
    throw new Error("SessionParam->saveData: Argument name ist nicht vom Typ String!");
  }
  if (! window.Ajax){
    focus();
    throw new Error("SessionParam->saveData: Kein Modul ajax.js installiert!!!");
  }
  var _sid = CMS_SID;
  if (! _sid){
    _sid = fake;
  }
  var req = Ajax.createInstance();
  req.setMethod('POST');
  req.setURL('/cgi-bin/cms');
  req.addParameter('_SID', _sid);
  req.addParameter('_bereich', 'system');
  req.addParameter('_aktion', 'ajax_reset_sessionparam');
  req.addParameter('name', name);
  var ajIDX = new String(req.id);
  var func = function () {
    if (Ajax.getInstance(ajIDX).getReadyState() == 4){
      Ajax.cursorFinished();
      if (returnFunc != undefined){
        return returnFunc();
      } else {
        if (Ajax.getInstance(ajIDX).getStatus() == 200){
          return true;
        } else {
          return false;
        }
      }  
    } else {
      Ajax.cursorWait();
    }
  }
  req.setCallBackFunction(func);
  req.open();
  req.sendAll();
}  

SessionParam._increment = [];
SessionParam._registerInstance = {};
SessionParam._registerInstanceLength = [];


SessionParam.stripSpace = function(attr){
  var result = '';
  if (attr){
    attr = new String(attr);
    result = attr.replace(/^\s+/,'');
    result = result.replace(/\s+$/,'');
  }
  if (result.match(/^\s+/) || result.match(/\s+$/)){
    return SessionParam.stripSpace(result);
  }
  return result;
}

SessionParam.getInstance = function(id) {
  if (arguments.length!=1) {
    throw new Error("Falsche Anzahl von Argumenten!");
  }
  if (! (SessionParam._registerInstance[id])){
    focus();
    throw new Error("Es ist keine SessionParam.Instance mit id=" + id + " registriert!");
  } 
  return SessionParam._registerInstance[id];
}

SessionParam.createInstance = function(id) {
  if (!arguments.length) {
    id = 'SessionParam' + SessionParam._increment.length;
    SessionParam._increment.push(1);
  }
  if (! (SessionParam._registerInstance[id])){
    SessionParam._registerInstance[id] = new SessionParam(id);
    SessionParam._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("SessionParam.createInstance: ID schon vorhanden!");
  }
  return SessionParam.getInstance(id);
}
   


