// events
YAHOO.namespace("inveztools.events");
YAHOO.inveztools.events.entries = new Array();

YAHOO.inveztools.events.create = function(e) 
{
  if(YAHOO.inveztools.events.entries[e] == null) 
    YAHOO.inveztools.events.entries[e] = new YAHOO.util.CustomEvent(e);
}
YAHOO.inveztools.events.subscribe = function(name, func)
{
  YAHOO.inveztools.events.entries[name].subscribe(func);
}
YAHOO.inveztools.events.fire = function(name, args)
{
  YAHOO.inveztools.events.entries[name].fire(args);
}

// utils
YAHOO.namespace("inveztools.util");
YAHOO.inveztools.util.trim_stock_exchange = function(stockid)
{
  var pos = stockid.lastIndexOf('.');
  if(pos >= 0)
    return stockid.substring(0, pos);

  return stockid;
}
YAHOO.inveztools.util.get_stock_code = function(stockid, exchange)
{
  var id = YAHOO.inveztools.util.trim_stock_exchange(stockid);
  return id+"."+exchange;
}
YAHOO.inveztools.util.parse_stockid = function(stockid)
{
  var pos = stockid.lastIndexOf('.');
  var ret = new Array();
  if(pos >= 0) {
    ret['id'] = stockid.substr(0, pos);
    ret['exchange'] = stockid.substr(pos+1);
  } else {
    ret['id'] = stockid;
    ret['exchange'] = '';
  }
  return ret;
}
YAHOO.inveztools.util.diff_price= function(prev, cur, decimal)
{
  if(decimal == 1) num = 10;
  else if(decimal == 2) num = 100;
  else num = 1000; // default
  return Math.round((cur - prev) * num) / num;
}
YAHOO.inveztools.util.diff_percent = function(prev, cur)
{
  return Math.round((cur - prev)/prev * 100 * 10) / 10;
}
YAHOO.inveztools.util.add_thousand_sep = function(num, force_sign)
{
  if(num == null) return '';

  var txt = num.toString();
  var i = txt.indexOf('.');
  var tmp = txt;
  var decimal = '';
  if(i != -1) {
    tmp = txt.substr(0, i);
    decimal = txt.substr(i);
  }
  var intpart = tmp;
  var sign = intpart.substr(0, 1);
  if(sign == '+' || sign == '-') {
    intpart = intpart.substr(1);
  } else {
    sign = '';
  }

  var ret = '';
  for(i=intpart.length-3; i>0; i-=3) {
    ret = ',' + intpart.substr(i, 3) + ret;
  }
  ret = intpart.substring(0, i+3) + ret + decimal;

  if(sign != '') return sign + ret;

  if(force_sign) return '+'+ret;

  return ret; 
}
YAHOO.inveztools.util.format_money = function(num, force_sign)
{
  var n = Math.round(num * 1000) / 1000;
  var str = n.toString();
  str = YAHOO.inveztools.util.add_thousand_sep(str, force_sign);
  var sign = str.substr(0, 1);
  if(sign == "-" || sign == '+') {
    return sign + "$" + str.substr(1);
  }
  return "$" + str;
}
YAHOO.inveztools.util.str2float = function(txt)
{
  var num = parseFloat(txt);
  if(isNaN(num)) return 0.0;

  return num;
}
YAHOO.inveztools.util.random_url_param = function()
{
  var d = new Date();
  return ".r="+d.getTime();
}
