// console.log in Firebug _________________________________________________

if (typeof(console) === 'undefined')
{
  var console = {};
  console.log = function (msg) 
  {
    //var p = document.body.appendChild(document.createElement('p'));
    //p.className = 'error';
    //p.appendChild(document.createTextNode(msg));
  }
}

// Function.prototype.bind in Prototype.js for jQuery _____________________

jQuery.scope = function (target, func)
{
  return function () 
  {
    func.apply(target, arguments);
  }
};

// Dictionary Extension ___________________________________________________

Object.associativeArray = (function ()
{
  var count = 0;
  return function ()
  {
    var assocaObj = this;
    var keys = [];
    
    var assoca = [];
    var assocastr = '__associativeArray' + (count++) + '__';
    assoca.number = [];
    assoca.string = [];
    assoca.boolean = [];

    assocaObj.set = function (key, value)
    {
      if (assoca[typeof key]) 
      {
        if (assoca[typeof key][key] === undefined)
        {
          keys[keys.length] = key;
        }
        assoca[typeof key][key] = value;
      }
      else 
      {
        if (!key.toString.__associativeFlag__) 
        {
          var orgToString = key.toString;
          key.toString = function (){
            return orgToString.apply(key,arguments)
          };
          key.toString.__associativeFlag__ = true;
        }
        if (key.toString[assocastr] === undefined) 
        {
          keys[keys.length] = key;
        }
        key.toString[assocastr] = value;
      }
      return value;
    };
 
    assocaObj.get = function (key)
    {
      if (assoca[typeof key]) 
      {
        return assoca[typeof key][key];
      }
      else 
      {
        return key.toString[assocastr];
      }
    };

    assocaObj.remove = function (key)
    {
      var value = assocaObj.get(key);
      var tmpKeys = [];
      for (var ci = 0,len = keys.length; ci < len; ++ci) 
      {
        if (keys[ci] !== key) 
        {
          tmpKeys[tmpKeys.length] = keys[ci];
        }
      }
      keys = tmpKeys;
      if (assoca[typeof key]) 
      {
        assoca[typeof key][key] = undefined;
      }
      else 
      {
        key.toString[assocastr] = undefined;
      }
      return value;
    };

    assocaObj.getKeys = function ()
    {
      return keys.concat([]);
    };

    assocaObj.collect = function (keyList)
    {
      var collection = [];
      if (!keyList) 
      {
        keyList = keys;
      }
      for (var ci = 0, len = keyList.length; ci < len; ++ci) 
      {
        collection[collection.length] = assocaObj.get(keyList[ci]);
      }
      return collection;
    };
  };
})();

// Bootstrap ______________________________________________________________

$(document).ready(function() {
var c = Controller.getInstance();
});