/*
  Class PropertySet (Proprietes d'une classe)
  NB : Cette classe interoperable avec la classe serveur
*/
// Imports : tool.js, Serializer.cls.js
//
// --- Constructor
function PropertySet(className)
{
 var varRtnObj=null;
 var varClsNam=PropertySet_getNameFor(className);
 if(varClsNam.length>0)
 {
  this.ownClsNam=varClsNam;
  this.ownPtyLst=new Array();
  varRtnObj=this;
 }
 return varRtnObj;
}
//---Implementation
function PropertySet_toString()
{
 var varRtnObj='';
 var varClsNam=this.getOwnerClassName();
 if(varClsNam!=null)
 {
  for(var i=0;i<this.getCount();i++)
  {
   var varElmObj=PropertySet_getElementAt(this,i);
   if(varElmObj!=null)
   {
    varRtnObj+=varClsNam;
    varRtnObj+='.';
    varRtnObj+=PropertySet_elementGetName(varElmObj);
    varRtnObj+='=';
	varElmVal=PropertySet_elementGetValue(varElmObj);
	if(isArray(varElmVal))
	{varElmVal=varElmVal.join(',');}
	if(isExtendObject(varElmVal))
	{varElmVal=getClassNameOf(varElmVal);}
    varRtnObj+=varElmVal;
    varRtnObj+='\n';
   }
  }
 }
 return varRtnObj;
}
//
function PropertySet_elementNew(name, value)
{
 var varRtnObj=null;
 var varPtyNam=PropertySet_getNameFor(name);
 if(varPtyNam.length>0)
 {varRtnObj=new Array(varPtyNam,value);}
 return varRtnObj;
}
//
function PropertySet_elementGetName(element)
{return element[0];}
//
function PropertySet_elementGetValue(element)
{return element[1];}
//
function PropertySet_elementSetValue(element, value)
{element[1]=value;}
//
function PropertySet_getNameFor(any)
{
 var varRtnObj='';
 if(isString(any)){varRtnObj=trimSpaces(any);}
 return varRtnObj;
}
//
function PropertySet_setElementAt(propertySet, index, element)
{
 var varRtnObj=false;
 if((index>=0)&&(index<propertySet.getCount()))
 {propertySet.ownPtyLst[index]=element;varRtnObj=true;}
 return varRtnObj;
}
//
function PropertySet_getElementAt(propertySet, index)
{
 var varRtnObj=null;
 if((index>=0)&&(index<propertySet.getCount()))
 {varRtnObj=propertySet.ownPtyLst[index];}
 return varRtnObj;
}
//
function PropertySet_getOwnerClassName()
{return this.ownClsNam;}
//
function PropertySet_getCount()
{return (this.ownPtyLst!=null)?this.ownPtyLst.length:0;}
//
function PropertySet_indexOf(name)
{
 var varRtnObj=-1;
 var varPtyNam=PropertySet_getNameFor(name);
 if(varPtyNam.length>0)
 {
  i=0;
  while((varRtnObj<0)&&(i<this.getCount()))
  {
   if(PropertySet_elementGetName(PropertySet_getElementAt(this,i))==varPtyNam)
   {varRtnObj=i;}
   i++;
  }
 }
 return varRtnObj;
}
//
function PropertySet_contains(name)
{
 var varRtnObj=false;
 if(this.indexOf(name)>=0){varRtnObj=true;}
 return varRtnObj;
}
//
function PropertySet_getAt(index, defaultValue)
{
 var varRtnObj='';
 if(defaultValue)
 {varRtnObj=defaultValue;}
 var varElmObj=PropertySet_getElementAt(this,index);
 if(varElmObj!=null)
 {varRtnObj=PropertySet_elementGetValue(varElmObj);}
 return varRtnObj;
}
//
function PropertySet_add(name, value)
{
 var varRtnObj=false;
 var varElmObj=PropertySet_elementNew(name,value);
 if((varElmObj!=null)&&(this.indexOf(name)<0))
 {this.ownPtyLst[this.getCount()]=varElmObj;varRtnObj=true;}
 return varRtnObj;
}
//
function PropertySet_change(name, value)
{
 var varRtnObj=false;
 var varElmIdx=this.indexOf(name);
 var varElmObj=PropertySet_getElementAt(this,varElmIdx);
 if(varElmObj!=null)
 {
  PropertySet_elementSetValue(varElmObj,value);
  varRtnObj=PropertySet_setElementAt(this,varElmIdx,varElmObj);
 }
 return varRtnObj;
}
//
function PropertySet_remove(name)
{
 var varRtnObj=false;
 var varElmIdx=this.indexOf(name);
 if(varElmIdx>=0)
 {
  var i=varElmIdx+1;
  while(i<this.getCount())
  {this.ownPtyLst[varElmIdx]=this.ownPtyLst[i];varElmIdx++;i++;}
  var varElmObj=PropertySet_getElementAt(this,varElmIdx);
  this.ownPtyLst[varElmIdx]=null;this.ownPtyLst.length=varElmIdx;
  varRtnObj=true;
 }
 return varRtnObj;
}
//
function PropertySet_removeAll()
{
 var varRtnObj=false;
 this.ownPtyLst.length=0;
 varRtnObj=true;
 return varRtnObj;
}
//
function PropertySet_set(name, value)
{
 var varRtnObj=false;
 var varPtyNam=PropertySet_getNameFor(name);;
 if(varPtyNam.length>0)
 {
  var varElmIdx=this.indexOf(varPtyNam);
  var varElmObj=null;
  if(varElmIdx>=0)
  {
   varElmObj=PropertySet_getElementAt(this,varElmIdx);
   if(varElmObj!=null)
   {
    PropertySet_elementSetValue(varElmObj,value);
    varRtnObj=PropertySet_setElementAt(this,varElmIdx,varElmObj);
   }
  }
  else
  {
   varElmObj=PropertySet_elementNew(name,value);
   if((varElmObj!=null)&&(this.indexOf(name)<0))
   {this.ownPtyLst[this.getCount()]=varElmObj;varRtnObj=true;}
  }
 }
 return varRtnObj;
}
//
function PropertySet_get(name, defaultValue)
{
 var varRtnObj='';
 if(defaultValue)
 {varRtnObj=defaultValue;}
 var varElmIdx=this.indexOf(name);
 var varElmObj=PropertySet_getElementAt(this,varElmIdx);
 if(varElmObj!=null)
 {varRtnObj=PropertySet_elementGetValue(varElmObj);}
 return varRtnObj;
}
//
function PropertySet_serialize()
{
 var objSerializer=new Serializer();
 var varSerLst=new Array();
 varSerLst[0]=this.ownClsNam;
 varSerLst[1]=this.ownPtyLst;
 return objSerializer.serialize(varSerLst);
}
//
function PropertySet_unserialize(serializedString)
{
 var varRtnObj=false;
 var objSerializer=new Serializer();
 var varSerLst=objSerializer.unserialize(serializedString);
 if(isArray(varSerLst)&&(varSerLst.length==2))
 {
  if(isString(varSerLst[0])&&isArray(varSerLst[1])&&(varSerLst[0]==this.ownClsNam))
  {
   this.ownClsNam=varSerLst[0];
   this.ownPtyLst=varSerLst[1];
   varRtnObj=true;
  }
 }
 return varRtnObj;
}
//--- Properties - Private
PropertySet.prototype.ownClsNam=null;
PropertySet.prototype.ownPtyLst=null;
//--- Methodes - Public
PropertySet.prototype.serialize=PropertySet_serialize;
PropertySet.prototype.unserialize=PropertySet_unserialize;
PropertySet.prototype.toString=PropertySet_toString;
PropertySet.prototype.getOwnerClassName=PropertySet_getOwnerClassName;
PropertySet.prototype.getCount=PropertySet_getCount;
PropertySet.prototype.indexOf=PropertySet_indexOf;
PropertySet.prototype.contains=PropertySet_contains;
PropertySet.prototype.getAt=PropertySet_getAt;
PropertySet.prototype.add=PropertySet_add;
PropertySet.prototype.change=PropertySet_change;
PropertySet.prototype.remove=PropertySet_remove;
PropertySet.prototype.removeAll=PropertySet_removeAll;
PropertySet.prototype.set=PropertySet_set;
PropertySet.prototype.get=PropertySet_get;