
function Notepad (id) {
  this.id = undefined;
  this.active = false;
  
  this._setID(id);
}

// #################################

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

// #################################

Notepad.prototype.setActive = function (bool) {
  if (arguments.length != 1) {
    focus();
    throw new Error('Notepad->setActive: Falsche Anzahl von Argumenten!');
  }
  if (typeof bool != 'boolean') {
    focus();
    throw new Error('Notepad->setActive: Argument bool ist nicht vom Typ Boolean!');
  }
  this.active = bool;
}

// #################################

Notepad.prototype.getData = function () {
  var data = Tools.getCookieValue(this.id);
  return data;
}       

// #################################

Notepad.prototype.addData = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error('Notepad->addData: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->addData: Argument str ist nicht vom Typ String!');
  }
  if (this.hasData(str)) {
     return;
  }
  var data = this.getData();
  if (data.toString().length) {
    data += ',';
  }
  data += str;
  this.saveData(data);
  alert('Der Eintrag wurde erfolgreich Ihrem Merkzettel hinzugefügt.');
  this.updatePreview();
}             

// #################################

Notepad.prototype.updatePreview = function () {
   var elem = document.getElementById('merkzettel');
   if (! elem) {
     return;
   }
   elem.innerHTML = this.getPreview();  
}     

// #################################

Notepad.prototype.hasData = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error('Notepad->hasData: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->hasData: Argument str ist nicht vom Typ String!');
  }
  var data = this.getData();
  var arr = Notepad.arrayFromString(data);
  for (var i=0; i<arr.length; i++) {
     var _data = arr[i];
     if (_data != str){
       continue;
     }
     return true;
  } 
   return false;
}  

// #################################

Notepad.prototype.deleteData = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error('Notepad->deleteData: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->deleteData: Argument str ist nicht vom Typ String!');
  }
  var data = this.getData();
  var orig = Notepad.arrayFromString(data);
  var copy = [];
  for (var i=0; i<orig.length; i++) {
     var _data = orig[i];
     if (_data != str){
       copy.push(_data);
     }
  } 
  data = Notepad.arrayToString(copy);
  this.saveData(data);
  alert('Der Eintrag wurde erfolgreich von Ihrem Merkzettel entfernt.');
  this.updatePreview();
}

// #################################

Notepad.prototype.generateQuery = function (elem) {
  if (arguments.length != 1) {
    return false;
  } 
  var data = this.getData();
  var arr = Notepad.arrayFromString(data);
  if (! arr.length) {
    return false;
  }
  for (var i=0; i<arr.length; i++) {
    var idArtikel = arr[i];
    //alert(idArtikel);
    if (! idArtikel.toString().length) {
      continue;
    }
    var param = document.createElement('input');
    param.type = 'hidden';
    param.value = idArtikel;   
    param.name = 'idartikel';
    elem.appendChild(param);
  }
   return true;
}

// #################################

Notepad.prototype.getDataLength = function () {
  var data = this.getData();
  var arr = Notepad.arrayFromString(data);
  return arr.length;
}

// #################################

Notepad.prototype.saveData = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error('Notepad->saveData: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->saveData: Argument str ist nicht vom Typ String!');
  }
  var data = Tools.setCookieValue(str, this.id);
}

// #################################

Notepad.prototype.getPreview = function () {
  var className = 'merkzettel-link';
  if (this.active) {
      //className += '-on';
  }
  var html =  '';
  html +=  '<form method="post" id="_FORM_'+ this.id + '" action="/cgi-bin/cms" onsubmit="return Notepad.getInstance(\''+ this.id +'\').generateQuery(this);">';
  html +=  '<input type="hidden" name="_SID" value="'+ Notepad._SID_ +'"/>';
  html +=  '<input type="hidden" name="_bereich" value="artikel" />';
  html +=  '<input type="hidden" name="_aktion" value="suche" />';
  html +=  '<input type="hidden" name="_status" value="" />';           
  html +=  '<input type="hidden" name="_sprache" value="notepad" />';
  html +=  '<input type="hidden" name="_sortierung" value="titel_asc" />';
  html +=  '<input type="hidden" name="_persistant_variant" value="merkzettel" />';
  html +=  '<input type="hidden" name="__DEBUG__" value="1" />';
  html +=  '<input type="submit" id="" value="'+ this.getDataLength()  +'" class="'+ className +'" />';
  html += '</form>';
  return html;
}

// #################################

Notepad.prototype.updateButton = function (str) {
  if (arguments.length!=1) {
    focus();
    throw new Error('Notepad.updateButton: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->updateButton: Argument str ist nicht vom Typ String!');
  }
  var elem = document.getElementById('_NOTEPAD_BUTTON_');
  var html = '<a href="javascript:void(0);" onclick="Notepad.getInstance(Notepad._COOKIE_NAME_).addData(\''+ str +'\'); Notepad.getInstance(Notepad._COOKIE_NAME_).updateButton(\''+ str +'\');" class="komponenten-link">Dem Merkzettel beifügen</a><br />';
  if (this.hasData(str)) {
      html = '<a href="javascript:void(0);" onclick="Notepad.getInstance(Notepad._COOKIE_NAME_).deleteData(\''+ str +'\'); Notepad.getInstance(Notepad._COOKIE_NAME_).updateButton(\''+ str +'\');" class="komponenten-link">Aus dem Merkzettel entfernen</a><br />';
  }
  elem.innerHTML = html;
}

// #################################

Notepad._COOKIE_NAME_ = undefined;
Notepad._SID_ = undefined;
Notepad._increment = [];
Notepad._autoIdxPrefix = '_Notepad_';
Notepad._registerInstance = {};
Notepad._registerInstanceLength = [];

// #################################

Notepad.arrayFromString = function(str) {
  if (arguments.length!=1) {
    focus();
    throw new Error('Notepad.arrayFromString: Falsche Anzahl von Argumenten!');
  }
  if (typeof str != 'string') {
    focus();
    throw new Error('Notepad->arrayFromString: Argument str ist nicht vom Typ String!');
  }
  var arr = [];
  if (! str.length) {
    return arr;
  }
  arr = str.split(/,/);
  return arr;
}

// #################################

Notepad.arrayToString = function(arr) {
  if (arguments.length!=1) {
    focus();
    throw new Error('Notepad.arrayToString: Falsche Anzahl von Argumenten!');
  }
  if (typeof arr != 'object') {
    focus();
    throw new Error('Notepad->arrayToString: Argument arr ist nicht vom Typ Array!');
  }
  var str = '';
  for (var i=0; i<arr.length; i++) {
    if (i > 0) {
      str += ','; 
    }
    str += arr[i];          
  }
  return str;
}

// #################################

Notepad.deleteInstance = function(id) {
  if (arguments.length!=1) {
    focus();
    throw new Error('Notepad.deleteInstance: Falsche Anzahl von Argumenten!');
  }
  if (! (Notepad._registerInstance[id])){
    focus();
    throw new Error('Notepad.deleteInstance: Es ist keine Notepad.Instance mit id=' + id + ' registriert!');
  }
  delete Notepad._registerInstance[id];
}

// #################################

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

// #################################

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



