var NO_PORTFELIO_NAME = 
    'Пожалуйста, укажите название портфеля, вам же будет удобнее с ним работать.';
var NO_STARTING_CAPITAL =
    'Пожалуйста, укажите стартовый капитал для портфеля.';
var WRONG_STARTING_CAPITAL = 
    'Стартовый капитал должен быть положительным числом, иначе вы вряд ли сможете что-нибудь купить на бирже.';
var WRONG_STOCKS_AMOUNT = 'Ошибка. Количество акций должно быть положительным числом.';
var NO_EMITEE = 'Ошибка. Нет эмитента для проведения операции.';
var NO_STOCK_PRICE = 'Ошибка. Нет данных о цене одной акции.';
var WRONG_STOCK_PRICE = 'Ошибка. Цена акции должна быть положительным числом.';
var NO_STOCKS_AMOUNT = 'Ошибка. Нет данных о количестве акций.';
var NO_COMISSION = 'Ошибка. Не указана комиссия брокеру.';
var WRONG_COMISSION = 'Ошибка. Комиссия брокеру должна быть положительным числом.';

function EnableDel(f) 
{
    if( !f.del_butt )
	return;
    b = f.del_butt;
    for (i = 0; i<f.elements.length; i++) 
	{
    	e = f.elements[i];
	if ( (e.name == 'del[]') && e.checked) 
	    {
	    b.disabled = false;
	    return;
	    }
	}
    b.disabled = true;
}

function ShowForm(frm, i) 
{
    var f = findObject( frm );
    if (window.screen.width) 
	{
	form_x = window.screen.width/2 - 200;
	form_y = 320;
	if(document.body.scrollTop)
	    form_y += document.body.scrollTop;
	else if (window.pageYOffset)
	    form_y += window.pageYOffset;
	}
    f.style.left = form_x;
    f.style.top = form_y;
    f.style.display = 'block';
    f.style.visibility = 'visible';
//    i.focus();
}

function ConfirmDel(f, msg) 
{
    if ( confirm(msg) )
	f.submit();
}

function HideForm(frm) 
{
    f = findObject( frm );
    if( f )
        f.style.visibility = 'hidden';
}

function trim(s) 
{
    i = 0;
    while (s.charAt(i) == ' ')
    	i++;
    s = s.substr(i);
    i = s.length-1;
    while (s.charAt(i) == ' ')
    	i--;
    s = s.substring(0, i+1);
    return s;
}

function is_filled(inp, msg) 
{
    if ( trim(inp.value) == '' ) 
	{
	alert(msg);
	inp.focus();
	return false;
	}
    return true;
}

function check(inp, cond, msg) 
{
    if( !cond ) 
	{
	alert(msg);
	inp.focus();
	return false;
	}
    return true;
}

function is_positive_float(inp, msg) 
{
    n = to_float(inp.value);
    if ( (parseFloat(n) != n ) || (n<=0) ) 
	{
	alert(msg);
	inp.focus();
	return false;
	}
    return true;
}

function is_positive_integer(inp, msg) 
{
    if ( (parseInt(inp.value) != inp.value ) || (inp.value<=0) ) 
	{
	alert(msg);
	inp.focus();
	return false;
	}
    return true;
}

function SetPok(t) 
{
    sel = document.dyn_form.pok;
    if(t == '0') 
	opts = port_opts;
    else 
	opts = cb_opts;
    sel.options.length = 0;
    for (i=0; i<opts.length; i++)
	sel.options[i] = opts[i];
}

function ShowOpForm(op) 
{
    f = document.op_form;
    ShowForm(f, f.op_ticker);
    f.op_op.selectedIndex = (op == 1 ? 0 : 1);
}

function ShowOpFormM(op, f, i, v) 
{
    ShowForm(f, i);
//    f.op_op.selectedIndex = (op == 1 ? 0 : 1);
    i.value = v;
    ShowEmitInfo(i);
    return false;
}

function to_float(n) 
{
    if ( (i = n.indexOf('.')) >= 0 )
	n = n.substr(0, i)+'.'+n.substr(i+1);
    return parseFloat(n);
}

function from_float(k) 
{
    k = new String(k);
    if ( (i = k.indexOf('.')) >= 0 ) 
	k = k.substr(0, i)+'.'+Math.ceil(k.substr(i+1, 2)+'.'+k.substr(i+3));
    return k;
}
										

function SubmitPort() 
{
    with ( document.add_form ) 
	{
	if( is_filled(port_name, NO_PORTFELIO_NAME )
	    && is_filled(start_cap, NO_STARTING_CAPITAL )
	    && is_positive_float(start_cap, WRONG_STARTING_CAPITAL)
	    )
	    submit();
	}
}

function Sort(v) 
{
    f=document.show_form;
    f.sort.value=v;
    f.submit();
}

var server_script_name = '';

function ShowOps(ticker) 
{
    f=document.show_form;
    f.action = server_script_name+'?mode=operations';
    f.elements[0].name = 'ticker';
    f.elements[0].value = ticker;
    f.submit();
}

function SetPok(t) 
{
    sel = document.dyn_form.pok;
    if (t == '0') 
	opts = port_opts;
    else opts = cb_opts;
    sel.options.length = 0;
    for (i=0; i<opts.length; i++)
	sel.options[i] = opts[i];
}

var ComissionPart = 0;
var ComissionMin = 0;
var ComissionMax = 0;

function CalcKomis(f) 
{
    if( f.price.value && f.count.value
	&& is_positive_float(f.price, WRONG_STOCK_PRICE) 
	&& is_positive_integer(f.count, WRONG_STOCKS_AMOUNT) ) 
	{
	k = to_float(f.price.value) * f.count.value * ComissionPart;
	if( k < ComissionMin ) 
	    k = ComissionMax;
	else 
	    if( k > ComissionMax ) 
		k = ComissionMax;
	f.komis.value = from_float(k);
	}
}

function ShowEmitInfo(sel) 
{
    f = sel.form;
    if (f.name == 'buy_form') 
	{
	f.emit_name.value = emit_names[sel.selectedIndex];
	f.price.value = emit_ask[sel.selectedIndex];
	} 
    else 
	{
	f.count.value = emit_counts[sel.selectedIndex];
	opts = document.buy_form.op_ticker.options;
	for (i=0; i<opts.length; i++)
	    if (opts[i].value == sel.value) 
		{
		f.emit_name.value = emit_names[i];
		f.price.value = emit_bid[i];
		break;
		}
	CalcKomis(f);
	}
}

var countComission = true;
function SubmitOp(f) 
{
    with (f) 
	{
	if( is_filled(op_ticker, NO_EMITEE )
	    && is_filled(price, NO_STOCK_PRICE )
	    && is_positive_float(price, WRONG_STOCK_PRICE)
	    && is_filled(count, NO_STOCKS_AMOUNT)
	    && is_positive_integer(count, WRONG_STOCKS_AMOUNT)
	    && is_filled(komis, NO_COMISSION)
	    && ( countComission ||
	        ( is_positive_float(komis, '')
		&& check(komis, (to_float(komis.value) >= ComissionMin) && (to_float(komis.value) <= ComissionMax),
			'Комиссия брокеру должна быть от '+ComissionMin+' до '+ComssionMax+' грн.') )
		)
	    && check(count, (name == 'sell_form') || ((to_float(price.value) * count.value + to_float(komis.value) <= current_cap)),
		'Недостаточно денежных средств: остаток '+current_cap+' грн., тогда как сумма сделки + комиссия = '
	    +from_float(to_float(price.value) * count.value + to_float(komis.value))+' грн.')
	    ) 
	    {
	    op_d.disabled = op_m.disabled = op_y.disabled = komis.disabled = false;
	    f.submit();
	    }
	}
}
