// -*-C-*-
/*
This file is part of phpWebApp,  which is a framework for building web
application based on relational databases.

Copyright 2001,2002,2003,2004,2005
Dashamir Hoxha, dashohoxha@users.sourceforge.net

phpWebApp is free  software; you can redistribute it  and/or modify it
under the terms of the GNU  General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.

phpWebApp  is distributed  in the  hope that  it will  be  useful, but
WITHOUT   ANY  WARRANTY;   without  even   the  implied   warranty  of
MERCHANTABILITY  or FITNESS  FOR A  PARTICULAR PURPOSE.   See  the GNU
General Public License for more details.

You  should have received  a copy  of the  GNU General  Public License
along with phpWebApp;  if not, write to the  Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

/**
 * Session class keeps a list of variables.
 * These variables can be read, changed, etc.
 */
function Session()
{
  this.Vars	= new Array();

  this.find	= session_find;
  this.isset	= session_isset;
  this.addVar	= session_addVar;
  this.getVar	= session_getVar;
  this.setVar	= session_setVar;
  this.rmVar	= session_rmVar;
  this.toStr	= toStr;
}

/** 
 * Returns the index of a variable in the array
 * or -1 if there is no such variable in array.
 */
function session_find(var_name)
{
  var idx;
  for (idx=0; idx < this.Vars.length; idx++)
    if (this.Vars[idx].Name == var_name)
      return idx;	//found
  //not found
  return -1;
}

/**
 * Returns true if the given var_name egzists in the session,
 * false otherwise.
 */
function session_isset(var_name)
{
  var idx = this.find(var_name);
  if (idx == -1)  return false;
  else            return true;
}

function session_addVar(var_name, var_value)
{
  if (this.isset(var_name))
    {
      var msg = TF_("There is a 'v_var_name' already in the list, use setVar to change its value.");
      msg = msg.replace(/v_var_name/, var_name);
      alert("Session.addVar: " + msg);
    }
  else
    {
      var sess_var = {Name:var_name, Value:var_value};
      this.Vars.push(sess_var);
    }
}

function session_getVar(var_name)
{
  var idx = this.find(var_name);
  if (idx == -1)	//not found
    {
      var msg = TF_("'v_var_name' doesn't exist.");
      msg = msg.replace(/v_var_name/, var_name);
      alert("Session.getVar: " + msg);
      return "UNDEFINED";
    }
  else
    return this.Vars[idx].Value;
}

function session_setVar(var_name, var_value)
{
  var idx = this.find(var_name);
  if (idx == -1)	//not found
    {
      var msg = TF_("'v_var_name' doesn't exist.");
      msg = msg.replace(/v_var_name/, var_name);
      alert("Session.setVar: " + msg);
    }
  else
    this.Vars[idx].Value = var_value;
}

function session_rmVar(var_name)
{
  var idx = this.find(var_name);
  if (idx == -1)  //not found
    {
      var msg = TF_("'v_var_name' doesn't exist.");
      msg = msg.replace(/v_var_name/, var_name);
      alert("Session.rmVar: " + msg);
      return;
    }

  //remove it from the array
  this.Vars.splice(idx, 1);
}

/** Returns a string of all variables and their values concatenated. */
function toStr()
{
  var name, value;
  var strVars = "";
  var i;
  for (i=0; i < this.Vars.length; i++)
    {
      name = this.Vars[i].Name;
      value = this.Vars[i].Value;
      value = value.replace(/\n/g,"\\n");
      strVars += name + "=" + value + "&";
    }
  return strVars;
}
