
function CheckForm( form_name ) {
	var fund = jQuery('select#fund' + tarea_id + ' option:selected').val();
	var date_afrom_name = jQuery('input#date_afrom' + tarea_id).attr('name');
	var date_ato_name = jQuery('input#date_ato' + tarea_id).attr('name');

	if (
		intervals[fund]['1'].length > 0 ||
		intervals[fund]['3'].length > 0
	   ) {
		jQuery('input#date_afrom' + tarea_id).attr('name', change_field_name( 'date_afrom' + tarea_id, '_workdays_', 'delete' ));
	}

	if (
		intervals[fund]['2'].length > 0 ||
		intervals[fund]['3'].length > 0
	   ) {
		jQuery('input#date_ato' + tarea_id).attr('name', change_field_name( 'date_ato' + tarea_id, '_workdays_', 'delete' ));
	}

	var check = CheckMandatoryFields( form_name );

	if ( !check ) {
		jQuery('input#date_afrom' + tarea_id).attr('name', date_afrom_name);
		jQuery('input#date_ato' + tarea_id).attr('name', date_ato_name);
	}

	return check;
}

function change_field_name( id, str, action ) {
	var el_name = jQuery( '#' + id ).attr( 'name' );

	// добавление str
	if ( action == 'add' ) {
		if ( !el_name.match( str ) ) {
			jQuery( '#' + id ).attr( 'name', str + el_name );
		}
	}
	// удаление str
	else {
		jQuery( '#' + id ).attr( 'name', el_name.replace( str, '' ) );
	}
}

function showTooltipInterval(event)
{
	dhtmlgoodies_tooltipMaxWidth = 200;
	dhtmlgoodies_tooltipMinWidth = 100;

	if ( typeof tarea_id == 'undefined' ) {
		tarea_id = '';
	}

	if ( jQuery('#acronym' + tarea_id).attr('title') != '' )
        showTooltip( event, jQuery('#acronym' + tarea_id).attr('title') );
}

function show_interval(fund)
{
	var n = "<br>";
	var str = '';

	for ( var c = 1; c < 4; c++ ) {
		if ( ( interval_string = make_range( fund, '  ', n, c ) ) != '' ) {
			str += ( c == 1 ? sysw['buy'] : ( c == 2 ? sysw['sell'] : sysw['buyandsell'] ) ) + ': ' + n + interval_string;
		}
	}

	return str;
}

function make_range( fund, prefix, postfix, buy_or_sell ) {
	var months = {
		'01': 'января',   '02': 'февраля', '03': 'марта',  '04': 'апреля',
		'05': 'мая',      '06': 'июня',    '07': 'июля',   '08': 'августа',
		'09': 'сентября', '10': 'октября', '11': 'ноября', '12': 'декабря'
	};

	var range_string_array = new Array();

	buy_or_sell = buy_or_sell || 3;

	if ( intervals[fund][buy_or_sell].length ) {
		for ( var m = 0, max_m = intervals[fund][buy_or_sell].length; m < max_m; m++ ) {
			var date_from = intervals[fund][buy_or_sell][m][0].split( '.' );
			var date_to   = intervals[fund][buy_or_sell][m][1].split( '.' );

			if ( date_from[1] == date_to[1] ) {
				range_string_array.push( prefix + sysw['from'] + ' ' + parseInt( date_from[0] ) + ' ' + sysw['to'] + ' ' + parseInt( date_to[0] ) + ' ' + months[date_from[1]] + postfix );
			}
			else {
				range_string_array.push( prefix + sysw['from'] + ' ' + parseInt( date_from[0] ) + ' ' + months[date_from[1]] + ' ' + sysw['to'] + ' ' + parseInt( date_to[0] ) + ' ' + months[date_to[1]] + postfix );
			}
		}
	}

	return range_string_array.join( '' );
}

function is_in_interval(fund, date, buy_or_sell, return_interval) {
	var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;
	var date_arr = myregexp.exec(date);

	if ( date_arr == null ) {
		return false;
	}

	var sum = date_arr[2] + '' + date_arr[1];

	var is_ok = true;
	if ( intervals[fund][buy_or_sell].length > 0 ) {
		is_ok = false;
		for(var i=0; i<intervals[fund][buy_or_sell].length; i++) {
			var myregexp = /^(\d\d).(\d\d)$/;
			var arr = myregexp.exec(intervals[fund][buy_or_sell][i][0]);
			var sum1 = arr[2] + '' + arr[1];
			var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;
			var arr = myregexp.exec(get_workday(intervals[fund][buy_or_sell][i][1] + '.' + date_arr[3]));
			var sum2 = arr[2] + '' + arr[1];
			if ( (sum1<=sum) && (sum<=sum2) )
				return ( return_interval ? [sum1,sum2] : true );
		}
	}

	if ( intervals[fund][3].length > 0 ) {
		is_ok = false;
		for(var i=0; i<intervals[fund][3].length; i++) {
			var myregexp = /^(\d\d).(\d\d)$/;
			var arr = myregexp.exec(intervals[fund][3][i][0]);
			var sum1 = arr[2] + '' + arr[1];
			var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;
			var arr = myregexp.exec(get_workday(intervals[fund][3][i][1] + '.' + date_arr[3]));
			var sum2 = arr[2] + '' + arr[1];
			if ( (sum1<=sum) && (sum<=sum2) )
				return ( return_interval ? [sum1,sum2] : true );
		}
	}

	return is_ok;
}

function find_start_date() {
	return start_date[jQuery('select#fund' + tarea_id + ' option:selected').val()];
}

function correct_date(fund, date, buy_or_sell)
{
	var error='';
	var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;
	var arr = myregexp.exec(find_start_date());
	var start_date = arr[3] + '' + arr[2] + '' + arr[1];
	var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;
	var arr = myregexp.exec(date);

	if(!arr) return '';

	var curr_date = arr[3] + '' + arr[2] + '' + arr[1];

	if ( start_date > curr_date )
	{
		if (buy_or_sell==1)
			error = 'На момент покупки фонда не существовало';
		if (buy_or_sell==2)
			error = 'На момент продажи фонда не существовало';
	}

	if (error=='' && !is_in_interval(fund, date, buy_or_sell))
	{
//		if (buy_or_sell==1)
//			error = 'Дата покупки пая не попадает ни в один интервал покупки';
//		if (buy_or_sell==2)
//			error = 'Дата продажи пая не попадает ни в один интервал продажи';

		error = 'Подача заявок на приобретение и погашение паев возможна только в период интервалов:<br><ul>' + make_range( fund, '<li>', ';' ) + '</ul>';

//		error = 'Подача заявок на приобретение и погашение паев возможна только в период интервалов:<br><ul><li>с 1 по 14 марта;<li>с 1 по 14 июня;<li>с 1 по 14 сентября;<li>с 1 по 14 декабря</ul>';
	}

	return error;
}

function change_start_date() {
	var start_date = find_start_date();

	if ( start_date.length > 0 ) {
		jQuery( '#start_date' + tarea_id ).html( sysw['start_date'] + '&nbsp;-&nbsp;' + start_date );
	}
	else {
		jQuery( '#start_date' + tarea_id ).html( '' );
	}
}

function change_suminvest() {
	var error='';

	var min_suminvest = OnSumChange();

	if ( parseInt( jQuery( '#sum' + tarea_id ).val() ) < parseInt( min_suminvest ) ) {
		error = 'Сумма вложения меньше минимально возможной суммы';
	}

	return error;
}

function change_min_sum() {
	var error='';
	var min_suminvest = OnSumChange();

	error = change_suminvest();
	return error;
}

// проверка на последовательность дат покупки и продажи
function check_dates(afrom, ato) {
	var error = '';
	var myregexp = /^(\d\d).(\d\d).(\d\d\d\d)$/;

	if ( myregexp.exec( afrom ) && myregexp.exec( ato ) ) {
		date_from = afrom.split( '.' );
		date_from_int = parseInt( date_from.reverse().join( '' ) );
		date_to = ato.split( '.' );
		date_to_int = parseInt( date_to.reverse().join( '' ) );

		if ( date_from_int >= date_to_int ) {
			error = 'Дата покупки не может быть больше даты продажи';
		}
	}

	return error;
}

function change_form_status() {
	var error='';
	var afrom = jQuery('#date_afrom' + tarea_id).val();
	var ato   = jQuery('#date_ato' + tarea_id).val();
	var fund  = jQuery('select#fund' + tarea_id + ' option:selected').val();

	var error_afrom = correct_date(fund, afrom, 1);
	var error_ato = correct_date(fund, ato, 2);

    var acronym = jQuery('#acronym' + tarea_id);
    acronym.attr( 'title', show_interval(fund) );

	change_start_date();
	var error_min_sum = change_min_sum();

	if (error_min_sum != '')
		error_min_sum = '<li>' + error_min_sum + '</li>';

	error_dates = '';

	if ( error_afrom != '' || error_ato != '' )
		error_dates = '<li>' + ( error_afrom != '' ? error_afrom : error_ato ) + '</li>';

	var error_check_dates = check_dates(afrom, ato);

	if ( error_check_dates != '' ) {
		error_dates += '<li>' + error_check_dates;
	}

	var date_from_arr = is_in_interval(fund, afrom, 1, 1);
	var date_to_arr = is_in_interval(fund, ato, 2, 1);

//alert( typeof date_from_arr + "\n" + typeof date_to_arr);

	if (
		//typeof date_from_arr == 'object'
		date_from_arr.length > 0 && date_to_arr.length > 0 && date_from_arr[0] == date_to_arr[0] && date_from_arr[1] == date_to_arr[1] ) {
		error_dates += '<li>Покупка и продажа невозможны в пределах одного интервала';
	}

	error_sum = '';
	if (
		jQuery( '#sum' + tarea_id ).val() == '' ||
		parseInt( jQuery( '#sum' + tarea_id ).val() ) == 0
	   ) {
		error_sum = '<li>Введите, пожалуйста, сумму вложения.';
	}

	error = error_min_sum + error_dates;

	var error_list = jQuery('#error_list' + tarea_id);

	if (error!='')
	{
		jQuery('input#submit' + tarea_id).attr( 'disabled', true );
		jQuery('#error_list' + tarea_id).html( '<table style="border:1px solid red;"><tr><td><ul>' + error_sum + error + '</ul></td></tr></table>' );
	}
	else {
		jQuery('input#submit' + tarea_id).attr( 'disabled', false );
		jQuery('#error_list' + tarea_id).html( ( error_sum != '' ? '<table style="border:1px solid red;"><tr><td><ul>' + error_sum + '</ul></td></tr></table>' : '' ) );
	}

	change_link('graph');
	change_link('table');
	change_fund_link();
}



function change_link(mode)
{
	jQuery('#' + mode + '_link' + tarea_id).attr(
		'href',
		'?mode'+ tarea_id + '=' + mode
		 + '&fund'+ tarea_id + '=' + jQuery('select#fund' + tarea_id + ' option:selected').val()
		 + '&afrom'+ tarea_id + '=' + get_correct_date( 'afrom' )
		 + '&ato'+ tarea_id + '=' + get_correct_date( 'ato' )
	);
}

// выбор корректной даты для ссылок
function get_correct_date( date_name ) {
	var val = '';
	var fund  = jQuery('select#fund' + tarea_id + ' option:selected').val();

	// дата покупки
	if ( date_name == 'afrom' ) {
		val = jQuery('#date_afrom' + tarea_id).val();

		// если интервалы у данного фонда отсутствуют, то возвращаем текущую дату
		if (
			intervals[fund]['1'].length == 0 &&
			intervals[fund]['3'].length == 0
		   ) {
			return val;
		}
		// выбираем массив интервалов
		else {
			var int_arr = ( intervals[fund]['1'].length > 0 ? intervals[fund]['1'] : intervals[fund]['3'] );
		}
	}
	// дата продажи
	else {
		val = jQuery('#date_ato' + tarea_id).val();

		// если интервалы у данного фонда отсутствуют, то возвращаем текущую дату
		if (
			intervals[fund]['2'].length == 0 &&
			intervals[fund]['3'].length == 0
		   ) {
			return val;
		}
		// выбираем массив интервалов
		else {
			var int_arr = ( intervals[fund]['2'].length > 0 ? intervals[fund]['2'] : intervals[fund]['3'] );
		}
	}

	var src_arr = val.split( '.' );
	var sum = src_arr[1] + '' + src_arr[0];

	// выборка нижней границы подходящего интервала
	for ( var i = 0, max_i = int_arr.length; i < max_i; i++ ) {
		var arr = int_arr[i][0].split( '.' );
		var sum1 = arr[1] + '' + arr[0];

		var arr = int_arr[i][1].split( '.' );
		var sum2 = arr[1] + '' + arr[0];

		if ( ( sum1 <= sum ) && ( sum <= sum2 ) ) {
			val = int_arr[i][1] + '.' + src_arr[2];
			break;
		}
	}

	return get_workday( val );
}

function get_workday( val ) {
	// создание объекта типа Date на основании выбранной даты
	var dt = val.split( '.' );
	var cd = new Date( dt[2], dt[1] - 1, dt[0] );
	// дата в миллисекундах
	var msec = cd.getTime();

	// если воскресенье, то добавляем сутки
	if ( cd.getDay() == 0 ) {
		msec += 24 * 60 * 60 * 1000;
	}
	// если суббота, то добавляем 2 суток
	else if ( cd.getDay() == 6 ) {
		msec += 2 * 24 * 60 * 60 * 1000;
	}

	// обновляем дату новым значением миллисекунд
	cd.setTime( msec );

	// возвращаем дату в формате ДД.ММ.ГГГГ
	return [
			( cd.getDate() < 10 ? '0' : '' ) + cd.getDate(),
			( cd.getMonth() < 9 ? '0' : '' ) + ( cd.getMonth() + 1 ),
			cd.getYear() + ( cd.getYear() >= 1900 ? 0 : 1900 )
		   ].join( '.' );
}

function change_fund_link() {
	jQuery('#fund_link' + tarea_id).attr(
		'href',
		jQuery('#fund_link_base' + tarea_id).val() + jQuery('select#fund' + tarea_id + ' option:selected').val()
	);
}

function on_create_page() {
	change_form_status();
}

function ChangeAgentList() {
	var fund_id = jQuery( 'select#fund' + tarea_id + ' option:selected' ).val();
	var buy = jQuery( 'select#agent_buy_' + tarea_id );
	var sell = jQuery( 'select#agent_sell_' + tarea_id );

	if ( ArrAgentsByPIF[fund_id] && ArrAgentsByPIF[fund_id].length > 0 ) {
		buy[0].options.length = ArrAgentsByPIF[fund_id].length + 1;
		sell[0].options.length = ArrAgentsByPIF[fund_id].length + 1;

		for ( var i = 0; i < ArrAgentsByPIF[fund_id].length; i++ ) {
			jQuery( 'select#agent_buy_' + tarea_id + ' option:eq(' + (i + 1) + ')' ).attr( 'value', ArrAgentsByPIF[fund_id][i][0] );
			jQuery( 'select#agent_buy_' + tarea_id + ' option:eq(' + (i + 1) + ')' ).text( ArrAgentsByPIF[fund_id][i][1] );

			jQuery( 'select#agent_sell_' + tarea_id + ' option:eq(' + (i + 1) + ')' ).attr( 'value', ArrAgentsByPIF[fund_id][i][0] );
			jQuery( 'select#agent_sell_' + tarea_id + ' option:eq(' + (i + 1) + ')' ).text( ArrAgentsByPIF[fund_id][i][1] );
		}
	}
	else {
		buy[0].options.length = 1;
		sell[0].options.length = 1;
	}
}

function OnAgentBuyChange()
{
	var select = jQuery('select#agent_buy_' + tarea_id + ' option:selected');
	var id     = select.val() ? select.val() : null;

	// указан агент
	if(id > 0)
	{
		for(var i=0; i<ArrAgent.length; i++)
		{
			if(ArrAgent[i][0] == id)
			{
				var el = jQuery('#min_sum_title' + tarea_id);

				if(el.length && ArrAgent[i][1] > 1)
				{
					el.html( sysw['min'] + ' ' + ArrAgent[i][1] + ' ' + sysw['rur'] );
				}
				else if(el)
				{
					el.html('');
				}
				return true;
			}
		}
	}
	// Банк Москвы
	else if(id == 0)
	{
		var fund_id = jQuery('select#fund' + tarea_id + ' option:selected').val();
		var el = jQuery('#min_sum_title' + tarea_id);

		if(el && fund_id)
		{
			for(var i=0; i<ArrFunds.length; i++)
			{
				if(ArrFunds[i][0] == fund_id &&  ArrFunds[i][1] > 1)
				{
					el.html( sysw['min'] + ' ' + ArrFunds[i][1] + ' ' + sysw['rur'] );
				}
				else if(ArrFunds[i][0] == fund_id)
				{
					el.html('');
				}
			}
		}
	}
}

function OnSumChange()
{
	var el  = jQuery('#sum' + tarea_id);
	var sum = el.val() ? el.val() : null;

	var select = jQuery('#agent_buy_' + tarea_id + ' option:selected');
	var id     = select.val() ? select.val() : null;

	// у агента
	if(id > 0)
	{
		var min_sum = null;

		for(var i=0; i<ArrAgent.length; i++)
		{
			if(ArrAgent[i][0] == id)
			{
				min_sum = ArrAgent[i][1];
				break;
			}
		}
	}
	// Банк Москвы
	else
	{
		var min_sum = null;
		var fund_id = jQuery('select#fund' + tarea_id + ' option:selected').val();

		for(var i=0; i<ArrFunds.length; i++)
		{
			if(ArrFunds[i][0] == fund_id)
			{
				min_sum = ArrFunds[i][1];
				break;
			}
		}
	}

	var submit = jQuery('input#submit' + tarea_id);
	if( submit.length && parseInt(sum) >= parseInt(min_sum) )
	{
		submit.attr( 'disabled', false );
	}
	else if( submit.length && (sum == '' || parseInt(sum) < parseInt(min_sum)) )
	{
		submit.attr( 'disabled', true );
	}

	return min_sum;

}

jQuery( document ).ready(
	function () {
		var datepickerOptions = {
			buttonImage: '/common/img/calk.gif',
			buttonImageOnly: true,
			buttonText: '',
			changeMonth: true,
			changeYear: true,
			closeText: 'Закрыть',
			constrainInput: true,
			currentText: 'Сегодня',
			dateFormat: 'dd.mm.yy',
			duration: 200,
			nextText: 'следующий месяц',
			prevText: 'предыдущий месяц',
			showButtonPanel: true,
			showOn: 'button',
			yearRange: '2003:2050'
		};

		jQuery("#date_afrom" + tarea_id).datepicker( datepickerOptions );
		jQuery("#date_ato" + tarea_id).datepicker( datepickerOptions );

		jQuery("img.ui-datepicker-trigger").mouseout(function() { hideTooltip(); });
		jQuery("img.ui-datepicker-trigger").mouseover(function(event) { showTooltipInterval(event); });

		OnAgentBuyChange();
		OnSumChange();
		on_create_page();

		jQuery('#sum' + tarea_id).bind('keyup', function () { OnSumChange(); change_form_status(); });
		jQuery('#date_afrom' + tarea_id + ',#date_ato' + tarea_id).bind('keyup change', function () { change_form_status(); });

		jQuery('select', jQuery('form#calc' + tarea_id).elements).bind('change', function () { jQuery("tr[id^='result']").hide(); });

		// обходим гадский баг IE, у которого событие change radio-элемента наступает только при blur после клика на элемент
		jQuery('input:radio',jQuery('form#calc' + tarea_id).elements).click( function () { this.blur(); } );
		// обработчик изменения состояния radio-элемента
		jQuery('input:radio',jQuery('form#calc' + tarea_id).elements).change( function () { jQuery("tr[id^='result']").hide(); } );

		jQuery('input:text', jQuery('form#calc' + tarea_id).elements).bind('keyup change', function (event) { hider(event); });

		function hider(e) {
//				e.keyCode == 32 ||
//				e.keyCode == 59 ||
//				isBetween( e.keyCode, 65, 90 ) ||
//				isBetween( e.keyCode, 96, 107 ) ||
//				e.keyCode == 109 ||
//				e.keyCode == 111 ||
//				e.keyCode == 188 ||
//				isBetween( e.keyCode, 190, 192 ) ||
//				isBetween( e.keyCode, 219, 222 ) ||

			if (
				(
				 e.type == 'keyup' &&
				 (
				  e.keyCode == 8 ||
				  e.keyCode == 46 ||
				  (
				   ( isBetween( e.keyCode, 48, 57 ) || e.keyCode == 110 || e.keyCode == 190 ) &&
				   !( e.altKey || e.ctrlKey || e.shiftKey )
				  )
				 )
				) ||
				e.type == 'change'
			   ) {
				jQuery("tr[id^='result']").hide();
			}
		}

		function isBetween(val, lowVal, hiVal) {
			return ( val >= lowVal && val <= hiVal );
		}
	}
);