//
// function for putting orders
//
var s_order_param = null;

//-------------------------------------
function submit_order()
{
  var param = collect_order_info($('f_os'));
  if (validate_order(param)) {
    fill_order_confirm(param);
    set_order_confirm_visible(true);
    s_order_param = param;
  }
}

//-------------------------------------
function clear_order()
{
  Form.getElements($('f_os')).each(function(el){
    switch(el.name){
      case "quantity":    el.value = "10"; break;
      case "limit_price": el.value = "50"; break;
      case "expiry[]":      el.value = "noexpire"; break;
      case "order_type":  el.checked = (el.value == 'market_order'); break;
    }
  })
  $('os_invalid_quantity').style.display = "none";
  $('os_invalid_limit_price').style.display = "none";
}

//-------------------------------------
function do_submit_order()
{
  var url = s_order_param['target']; s_order_param['target'] = "";
  if (!url) { alert('no target url specified'); return; }
  var myAjax = new Ajax.Request(url,
    {
      postBody: Ajax.toJSONString(s_order_param),
      onSuccess: function(req) {
        $('order_process_title').className = "completed";
        window.setTimeout("order_confirm_visible_countdown(3)", 100);
        refresh_contract_statistics(s_order_param['group_id'], s_order_param['contract_id']);
        if (refresh_portfolio) refresh_portfolio();
      },
      onFailure: function(req) {
        show_error_msg(req);
        stop_submit_order();
      }
    });

  $('order_process_title').className = "processing";
  $('order_process').style.display = "block";
  $('order_submit').style.display = "none";
  $('order_confirm').style.display = "none";
}

//-------------------------------------
function stop_submit_order()
{
  s_order_param = null;
  set_order_confirm_visible(false);
}

//-------------------------------------
function collect_order_info(fo)
{
  var param = {};
  var a = Form.getElements(fo);
  Form.getElements(fo).each(function(el){
    if (el.name) {
      switch(el.name){
        case "sell_or_buy":
        case "order_type":
          if (el.checked) param[el.name] = el.value;
          break;
        case "limit_price":
          param[el.name] = Math.round(el.value * 1000);
          break;
        default:
          param[el.name] = el.value;
      }
    }
  })
  return param;
}

//-------------------------------------
function validate_order(param)
{
  var valid = true;
  // validate order type and price
  if (param['order_type'] == 'limit_order') {
    var valid = false;
    var price = param['limit_price'];
    var min_price = param['min_price'];
    var max_price = param['max_price'];
    var price_unit = param['price_unit'];
    // check price format
    if (!isNaN(price)) {
      // check price range
      if (min_price <= price && price <= max_price) {
        // check price unit
        valid = (price % price_unit == 0);
      }
    }
  }
  $('os_invalid_limit_price').style.display = valid ? "none" : "block";

  // validate quantity
  var qty = parseInt(param['quantity'])
  if (qty > 0 && qty <= 100000) {
    $('os_invalid_quantity').style.display = "none";
    param['quantity'] = qty;
  } else {
    $('os_invalid_quantity').style.display = "block";
    valid = false;
  }

  return valid;
}

//-------------------------------------
function fill_order_confirm(param)
{
  var is_buy = (param['sell_or_buy'] == 'buy');
  $('oc_buy').style.display = (is_buy ? "block" : "none");
  $('oc_sell').style.display = (!is_buy ? "block" : "none");

  var limit_order = (param['order_type'] == 'limit_order');
  $('oc_limit_order').style.display = limit_order ? "block" : "none";
  $('oc_typevalue').style.display = limit_order ? "block" : "none";
  $('oc_market_order').style.display = !limit_order ? "block" : "none";

  var expiry = (param['expiry[]'] == 'noexpire');
  //$('oc_noexpire').style.display = expiry ? "block" : "none";
  //$('oc_today').style.display = !expiry ? "block" : "none";
  $('oc_noexpire').style.display = "none";
  $('oc_today').style.display = "none";
  $('oc_time').innerHTML=$('expiry').value;
  
  $('oc_quanvalue').innerHTML = param['quantity'];
  $('oc_typevalue').innerHTML = param['limit_price']/1000;
}

//-------------------------------------
function set_order_confirm_visible(visible)
{
  $('order_submit').style.display = visible ? "none" : "block";
  $('order_confirm').style.display = visible ? "block" : "none";
  $('order_process').style.display = "none";
}

//-------------------------------------
function order_confirm_visible_countdown(count)
{
  if (count > 0) {
    var btn = $('os_back');
    if (btn) {
      var mat = btn.value.match(/(.*[^0-9])[0-9]*/);
      btn.value = (mat ? mat[1] : "") + count;
      window.setTimeout("order_confirm_visible_countdown("+(count-1)+")", 1000);
    }
  } else {
    set_order_confirm_visible();
  }
}

//-------------------------------------
function refresh_order_book(book)
{
  $('orderbook_div').remove();
  Element.insert($('sidebar'), {'top': book});
  //new Insertion.Top($('sidebar'), book);
  new Effect.Highlight($('orderbook_div'));
}