/**
 * Ядро проекта. бета, содержит минимум
 */
var ZCore = function(){
  var self = this;
  var triggerCollection = {};
  self.bind = function(eventName, fn){
    if(typeof fn != 'function'){return false;}
    if (!(triggerCollection[eventName] instanceof Array)){
      triggerCollection[eventName] = [];
    }
    triggerCollection[eventName].push(fn);
    return true;
  };
  self.trigger = function(eventName, data){
    var Events = triggerCollection[eventName];
    if (Events instanceof Array){
      for (var i = 0; i < Events.length; i++){
        Events[i](data);
      }
      return true;
    }
    return false;
  };
  return self;
}();
/**
 * Эквивалент шаблона класса
 * Не наследовать Ядро!! его методы уже включены
 * Юзать: var my_class = new ZClass(?parents,)
 * my_class.inherit(?parents,)
 */
var ZClass = function(){
  var self = this;
  self.inherit = function(){
    //init variables
    var child = this;
    if (arguments.length == 0){
      return child;
    }
    var parentsLen = arguments.length;
    var prototypes = {};
    for (var i = 0; i < parentsLen; i++){
      $.extend(prototypes, arguments[i].prototype);
//      prototypes.push(arguments[i].prototype);
    }
    child.prototype = prototypes;
    child.prototype.constructor = child;
    return child;
  };
  if (arguments.length > 0){
     self.inherit.apply(this, arguments);
  }
  self.trigger = ZCore.trigger;
  self.bind = ZCore.bind;
  return self;
};
