/**
 * Stellt Funktionen zur Behandlung von GET Parametern bereit
 * 
 * @param string fd - Begrenzung der ersten Var (default = '?')
 * @param string nd - Begrenzung der weiteren Vars (default = '&')
 * @param string as - Zuweisungszeichen zwischen Key und value (default = '=')
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function GETParameter(fd,nd,as){
  this.input = (window.location.search.length>0)? window.location.search : '?para1=1&para2=2&para3=3%201';
  this.firstDelim   = fd || '?';
  this.nextDelim    = nd || '&';
  this.assignment   = as || '=';
  
  this.getParameter = _GETPARAMETER;
  this.getAssoc     = _GETASSOC;
  this.getValues    = _GETVALUES;
  this.getKeys      = _GETKEYS;
  this.debug        = _DEBUG;
}




/**
 * Liefert ein Assoc Array der GET Parameter
 *
 * @Example:
 *           var x = new GETParameter();
 *           alert(x.getAssoc()['para3']);
 *
 * @prama: -
 * @return: array - key = fields, values = unsecaped values
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function _GETASSOC(){
  var url = this.input;
  if(url.indexOf('=') == -1 || url.indexOf(this.firstDelim) == -1){
    return false;
  }
  var temp = url.split(this.nextDelim);
  var result = new Array();
  var key = '';
  var val = '';
  for(var x=0; x<temp.length; x++){
    if(x==0){
      key = temp[x].substring(1,temp[x].indexOf(this.assignment));
    }else{
      key = temp[x].substring(0,temp[x].indexOf(this.assignment));
    }
    val = temp[x].substring(temp[x].indexOf(this.assignment)+1,temp[x].length);
    result[unescape(key)] = unescape(val);
  }
  return result;
}




/**
 * Liefert ein Array mit den Werten der GET Parameter
 *
 * @Example:
 *           var x = new GETParameter();
 *           alert(x.getValues()); *
 * @prama: -
 * @return: array - key = 0-x, values = unsecaped values
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function _GETVALUES(){
  var url = this.input;
  if(url.indexOf('=') == -1 || url.indexOf(this.firstDelim) == -1){
    return false;
  }
  var temp = url.split(this.nextDelim);
  var result = new Array();
  var val = '';
  for(var x=0; x<temp.length; x++){
    val = temp[x].substring(temp[x].indexOf(this.assignment)+1,temp[x].length);
    result[x] = unescape(val);
  }
  return result;
}




/**
 * Liefert den Wert des übergebenen Pramaeters
 *
 * @Example:
 *           var x = new GETParameter();
 *           alert(x.getParameter('para3'));
 * @prama:  string - name des Parameteres
 * @return: array - key = 0-x, values = unsecaped values
 *          undefined
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function _GETPARAMETER(para){
  return this.getAssoc()[para];
}




/**
 * Liefert ein Array mit den Werten der GET Parameter
 *
 * @Example:
 *           var x = new GETParameter();
 *           alert(x.getKeys());
 * @prama: -
 * @return: array - key = 0-x, values = unescaped keys
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function _GETKEYS(){
  var url = this.input;
  if(url.indexOf('=') == -1 || url.indexOf(this.firstDelim) == -1){
    return false;
  }
  var temp = url.split(this.nextDelim);
  var result = new Array();
  var val = '';
  for(var x=0; x<temp.length; x++){
    if(x==0){
      key = temp[x].substring(1,temp[x].indexOf(this.assignment));
    }else{
      key = temp[x].substring(0,temp[x].indexOf(this.assignment));
    }
    result[x] = unescape(key);
  }
  return result;
}




/**
 * Testet die Klasse - führt jede Methode aus und liefert das Ergebnis...
 *
 * @Example:
 *           var x = new GETParameter();
 *           x.debug('?test=ok&test2=not%20ok','test2');
 * @prama: string - URL mit den Parametern
 * @prama: string - Para - auszulesender Parameter
 * @return: -
 * @Author: Andreas Gaisbauer <ag@impulsenetwork.de>
 * @Version: 1.0 - 2004-06-22
 */
function _DEBUG(url,para){
  this.input = url;
  var x = 0;
  var temp = '';
  for (var elem in this.getAssoc()){
    x++;
    temp += elem+' | ';
  }
   
  alert('getAssoc hat '+x+' elemente, nämlich '+temp);
  alert('getValues liefert: '+this.getValues());
  alert('getKeys liefert: '+this.getKeys());
  alert('der Wert von '+para+' ist "'+this.getParameter(para)+'"');
}
