function newClass(parent, prop)
{    
  // Dynamically create class constructor.
  var clazz = function()
  {
    // Stupid JS need exactly one "operator new" calling for parent
    // constructor just after class definition.
    if (clazz.preparing) return delete(clazz.preparing);
    // Call custom constructor.
    if (clazz.constr)
	{
      this.constructor = clazz; // we need it!
      clazz.constr.apply(this, arguments);
    }
  }
  clazz.prototype = {}; // no prototype by default
  if (parent && typeof(parent) == 'function')
  {
    parent.preparing = true;
	var protoObject = new parent;
    clazz.prototype = protoObject;
    clazz.prototype.constructor = parent;
    clazz.constr = parent; // BY DEFAULT - parent constructor

	if (!clazz.prototype.parents) clazz.prototype.parents = [];
	clazz.prototype.generation = clazz.prototype.parents.length;
    clazz.prototype.parents.push(protoObject);
 }
  if (prop)
  {
    for (var k in prop)
	{
      if (k != "constructor") clazz.prototype[k]  = prop[k];
    }
    if (prop.constructor && prop.constructor != Object) clazz.constr = prop.constructor;
  }
  clazz.prototype.parent = function ()
  {
	var parent = this.constructor.prototype;
	if (this.generation && this.generation > 0)
	{
		parent = this.parents[this.generation - 1];
	}
	return parent;
  };
  return clazz;
}    