/*
 *  Обзов ПИФов
 *--------------------------------------------------------------------------*/
// TODO: сделать кэширование аяксовых данных

var Funds = Class.create();
Funds.prototype = 
{
	
	initialize: function()
    {
		this.IE6 = navigator.userAgent.indexOf('MSIE 6') > -1;
		this.curtab = -1;
	},

	
	/*
	 *  Навешивает на таблицу обработчики для просмотра подробной информации о ПИФах
	 *--------------------------------------------------------------------------*/
	tableProcess: (function() {
		
		var sharesTable = $$('#shares tr[id!=fund_details]');
		
		clickedCells = [];
		
		Event.observe('shares', 'click', function(event) {
		  
			// id нажатой ячейки
			var activeCell = Event.element(event).up().id;
			// если id ячейки пусто, значит мы кликнули на текст в тэгах, и надо подняться на 2 узла вверх
			if(!activeCell) activeCell = Event.element(event).up(1).id;
			var tmp = 0;
			
			sharesTable.each(function(s, index)
			{
			  
			  
					if(activeCell != 'fund_details')
					{
						if(s.id == activeCell)
						{

						  
						  
						  
              // условие выполняющееся для ячейки на которую щёлкнули
							var fid = activeCell.substr(3, activeCell.length);
							
							// это поле уже было нажато
							if(clickedCells[fid] > 0)
							{
								tmp = $('fund_details').toggle();
								$('export_table').toggle();
								$('export_form').toggle();
								
								// показываем инфу второй раз
								if(tmp.style.display != 'none')
								{
									//s.className = 'active';
									
									var URL = Funds.prototype.urlFormer('fund', fid);
									new Ajax.Request(URL, 
									{
										method: 'post',
										onFailure: function() {
											Funds.prototype.error(3);
										},
										
										onSuccess: function(transport) {
											Funds.prototype.pifInfo(transport.responseText.evalJSON(), fid);
											clickedCells[fid] = fid;
										},
										
										onLoading: function() {
											// удаляем старую строку с описанием и вставляем новую
											$('fund_details').remove();
											new Insertion.After(activeCell, '<tr id="fund_details"><td colspan="5" align="center"><img src="/pic/ajax-loader.gif" /></td></tr>');
										}
									});
								}
								else s.className = 'simple';
							}
							// это еще не было нажато поэтому загружаем данные
							else 
							{
								//s.className = 'active';
								var URL = Funds.prototype.urlFormer('fund', fid);
								new Ajax.Request(URL, {
									method: 'post',
										onFailure: function() {
											Funds.prototype.error(3);
										},
										
										onSuccess: function(transport) {
											Funds.prototype.pifInfo(transport.responseText.evalJSON(), fid);
											clickedCells[fid] = fid;
										},
										
										onLoading: function() {
											// удаляем старую строку с описанием и вставляем новую
											$('fund_details').remove();
											new Insertion.After(activeCell, '<tr id="fund_details"><td colspan="5" align="center"><img src="/pic/ajax-loader.gif" /></td></tr>');
										}
									});
							}
						}
						else
						{
						  // условие выполняющееся для всех ячеек, кроме той, на которую щёлкнули
						    
						  s.className = 'simple';
//						  
//						  $('fund_details').onclick = function() 
//						  {
//                var id = (typeof Event.element(event).id != 'undefined') ? Event.element(event).id : '';
//                var substr = id.substr(0, 3);
//                if(substr != 'pif') {
//                  alert('выбрана не строка таблицы с пифом');
//                  $(activeCell).className = 'active';
//                  alert(activeCell);
//                }
//		          }

						}
						
						
						
						
						
					}
			});
			
		});
		
		
		// для IE6 назначаем смену цвета при наведении
		/*
		if(this.IE6) {
			sharesTable.each(function(s, index) {
				Event.observe(s, 'mouseover', function() { Event.element(event).up().setStyle({background: '#eee'}) });
				Event.observe(s, 'mouseout',  function() { Event.element(event).up().setStyle({background: '#fff'}) });
			});
		}
		*/
	}),
	
	
	
	
	/*
	 *  Переключает селекты в заголочных 2-х ячейках
	 *--------------------------------------------------------------------------*/
	toggleHeaderCells: function(mode) {
	
		if(mode == 1) v = 'first';
		else v = 'second';
		$('extract' + mode + 'link').style.display='inline';
		$('extract' + mode + 'link').update( '<span><strong>' + $(v)[ $(v).selectedIndex ].text + '</strong></span>' );
		if($(v).value == 'period') $('extract' + mode + 'link').innerHTML += ' <em>*</em>';
		$('extract' + mode + 'link').style.display = 'block';
		$(v).style.display='none';
	},
	
	
	/*
	 *  Вставляет в тело таблицы рисунок загрузки, пока контент не пришёл
	 *--------------------------------------------------------------------------*/
	loaderImage: function(mode) {
		switch(mode) {
			case 1:
				$('matrix').update('&nbsp;');
				$('matrix').setStyle({
					background: 'url("/pic/ajax-loader-big.gif") no-repeat 50% 50%',
					height: '200px'
				});
			break;
			
			case 3: 
				$('shares').update('<tr id="fund_details"><td colspan="5" align="center"><img src="/pic/ajax-loader.gif" alt="" /></td></tr>');
			break;
		}
	},
	
	

	/*
	 *  Формирует URL для запроса
	 *--------------------------------------------------------------------------*/
	urlFormer: function(mode, fid) {
		var URL = null;
		switch(mode) 
		{
			//	Обзор ПИФов
			case 'common':
				URL  = '/funds/list/sort/' + $('sort').value;
				URL += '/sorttype/' + $('sorttype').value;
				URL += (fundtype == '') ? '' : '/fundtype/' + fundtype;
				URL += '/first/' + $('first').value;
				URL += '/second/' + $('second').value;
				URL += '.js';
				
			break;
			
			//	Выбор ПИФа
			case 'fund':
				URL = '/funds/detail/id/'+ fid + '.js';
			break;
		}
		
		return(encodeURI(URL));
	},
	
	


	/*
	 * Открывает вкладку "Выбор ПИФа" и отображает подробную инфу о нём
	 *--------------------------------------------------------------------------*/		
	tabCross: function(j, event) {
		$('tab1e').style.display='block';
		$('tab3').className='';
		$('tab3e').style.display='none';
		$('tab1').className='active';
		Funds.prototype.pifLinks(j, '', event, 1, 1);
	},
	
	
	
	
	
	
	/*
	 *  Ставит активной ссылку конкретного ПИФа и отправляет запрос на вывод данных
	 *--------------------------------------------------------------------------*/	
	pifLinks: function(j, className, event, mode, mode2) {
		var active = 'fund'+j;
		
		// перерисовывает все ссылки и выделяет активную
		for(i=0; i<links.length; i++) {
			if(active == links[i]) {

				$(active).className = 'active';
		
				var tab = $('tab1').down(1);
				tab.className = 'active';
				tab.title = 'Вернуться к матрице выбора ПИФов';
				
				if(className != 'active') {
					var URL = this.urlFormer('fund', j);
					
					Funds.prototype.loaderImage(1);
					
					new Ajax.Request(URL, {
						method: 'post',
//						onLoading: function() { Funds.prototype.loaderImage(1); },
						onFailure: function() { Funds.prototype.error(1); },
						onSuccess: function(transport) { Funds.prototype.pifInfoDetailed(transport.responseText.evalJSON(), mode, mode2);}
					});
				};

				Event.observe('tab1', 'click', function(event) {
					if(matrix_sign == 1)
					   Funds.prototype.drawMatrix();
					tab.className = '';
					$(active).className = '';
					Event.stop(event);
				});
			}
			else $(links[i]).className = '';
		}
	},
	
	
	

	/*
	 * Вывод подробной информации о ПИФе
	 *--------------------------------------------------------------------------*/
	pifInfo: function(data, fid) {
		//$('fund_details').update('<td colspan="5"><div id="realne_graph"></div></td>');
		$('fund_details').update('<td colspan="5"><table width="100%" id="export_table"><tr><td><div id="realne_graph"></div><div id="text_block"></div></td><td width="240"><div id="export_form"></div></td></tr></table>    <div style="text-align: center; margin-right: 240px;"><div style="width: 271px; margin: 0 auto; padding-bottom: 10px;" class="block"><a href="/form" class="buyfunds">Докупить паи</a><a href="#" onclick="Funds.prototype.tabCross('+ fid +', event); return false;" style="float: left; padding-top: 5px;">Подробное описание</a></div></div></td>');
		
		//alert(123);

		var flashvars = {
			path: "/swf/amcharts/amline/",
			settings_file: escape("/swf/amcharts/amline/amline_settings2.xml"),
			data_file: escape(data.link_to_data),
			preloader_color: "#ffffff"
		};
		
		var params = {
			scale: "showAll",
			menu: "false",
			align: "middle",
			salign: "lt",
			bgcolor: "#ffffff",
			wmode: "opaque"
		};
		
		swfobject.embedSWF("/swf/amcharts/amline/amline.swf", "realne_graph", "100%", "400", "8.0.0", "/js/swfobject/expressInstall.swf", flashvars, params, {});
		
		//if(typeof(data.text_block)!='number');
		
		if(typeof(data.text_block)=='string')
		  str = data.text_block;
	    else
	       str = '&nbsp;';
	       
        $('text_block').update(str);
		
		showExportForm();
		add_element('input', document.forms['exportForm'], {
		  type: 'hidden',
		  name: 'export[fund]',
		  value: fid
		});
		
		
		
	},
	
	
	
	
	
	getExportForm: function() {
	  $('export_form').innerHTML = exportForm;
	},
	
	
	

	/*
	 * Вывод подробной информации о ПИФе
	 *--------------------------------------------------------------------------*/
	pifInfoDetailed: function(data, mode, mode2) {
		var str = '';
		var t0, t1;
		
		if(mode == 1) {
			var t1, t2;
			if(data.fund_type == 'Открытый') {
				t1 = 'block';
				t2 = 'none';
			}
			else {
				t1 = 'none';
				t2 = 'block';
			}

			$('fund_groups0').style.display = t1;
			$('fund_groups1').style.display = t2;
		}
		
		if(mode2 == 1) {
			t0 = { className: '',       display: 'none' };
			t1 = { className: 'active', display: 'block' };
		}
		else {
			t0 = { className: 'active', display: 'block' };
			t1 = { className: '',       display: 'none' };
		}
		
		$('matrix').setStyle({backgroundImage: 'none', height: 'auto'});
		$('matrix').update('&nbsp;');
		
		//for(key in data) str += key + ' => ' + data[key] + "\n";
		//background: pink; overflow: hidden; padding-left: 25px;
		str += '<div style="overflow: hidden; padding-left: 25px">';
		str += '<h2>'+  data.name +'</h2>';
		str += '<div id="fundwrap">';
		str += '<em id="t0" onclick="javascript:togglePifDetails(0, \'t\', \'pifInfo\')" class="'+ t0.className +'">Динамика фонда</em><div id="pifInfo0" style="display:'+ t0.display +'"><div id="pifInfoGraph"><div id="realne_pifInfoGraph"></div></div><div id="pifInfoDesc"></div></div>';
		str += '<em id="t1" onclick="javascript:togglePifDetails(1, \'t\', \'pifInfo\');"  class="'+ t1.className +'">Подробное описание</em><div id="pifInfo1" style="display:'+ t0.display +'"></div>';
		str += '<em id="t2" onclick="javascript:togglePifDetails(2, \'t\', \'pifInfo\');">Условия приобретения и погашения</em><div id="pifInfo2" style="display: none"></div>';
		str += '<div style="text-align: center; padding: 15px 0 10px;"><a href="/form" class="buy">Купить</a></div>';
		str += '</div>';
		str += '</div>';
		
		$('matrix').update(str);

		var sign = (data.fund_type == 'Интервальный') ? dateLastForm : dateLastUpdate;
		str  = '<table class="shares"><thead><tr>';
		str += (data.fund_type != 'Интервальный') ? '<th><strong>за '+ sign +'</strong></th>' : '';
		str += '<th><strong>за месяц <dfn onmouseover="tip_show(event, \'Данные приведены на \'+ dateLastForm +\' г.\', 1)" onmouseout="tip_hide(event)">*</dfn></strong></th>';
		str += '<th><strong>за год <dfn onmouseover="tip_show(event, \'Данные приведены на \'+ dateLastForm +\' г.\', 1)" onmouseout="tip_hide(event)">*</dfn></strong></th>';
		str += '<th><strong><dfn id="years_changes">за все время</dfn> <dfn onmouseover="tip_show(event, \'Данные изменения стоимости пая приведены за период с последнего рабочего дня календарного месяца, в котором завершено формирование фонда, по \'+dateLastForm+\' г.\', 1)" onmouseout="tip_hide(event)">**</dfn></strong></th></tr></thead>';
		
		str += '<tbody>';
		str += (data.fund_type != 'Интервальный') ? '<td>' + this.digitFormat(data.change_for_day) + '</td>' : '';
		str += '<td>' + this.digitFormat(data.change_for_month)  + '</td>';
		str += '<td>' + this.digitFormat(data.change_for_year)   + '</td>';
		str += '<td id="last_col">' + this.digitFormat(data.change_for_period) + '</td></tr></tbody>';
		str += '</table><span><strong>Величина СЧА на '+ sign +':</strong> '+ (data.spa) + ' руб.</span><ul><li><a href="'+ data.lastWeeklyReport +'" target="_blank">Еженедельный отчет</a></li></ul>';
		//str += '<div class="tooltip">*&nbsp;&nbsp;&nbsp;&nbsp;Данные приведены на '+ dateLastForm +' г.<br />** Данные изменения стоимости пая приведены за период с последнего рабочего дня календарного месяца, в котором завершено формирование фонда, по 30.08.2008 г.</div>';
		
		var flashvars = {
			path: "/swf/amcharts/amline/",
			settings_file: escape("/swf/amcharts/amline/amline_settings.xml"),
			data_file: escape(data.link_to_data),
			preloader_color: "#ffffff"
		};
		
		var params = {
			wmode: "opaque",
			scale: "noscale",
			align: "center",
			menu: "false",
			bgcolor: "#F7F7F7"
		};
		
		swfobject.embedSWF("/swf/amcharts/amline/amline.swf", "realne_pifInfoGraph", "480", "350", "8.0.0", "/js/swfobject/expressInstall.swf", flashvars, params, {});
		
    $('pifInfoDesc').innerHTML = str;
    
    
    
    if(typeof data.changes_by_years.size == 'undefined')
    {
      $('years_changes').update();
      var select = add_element('select', $('years_changes'), {});
      
      var all_time = add_element('option', select, {'value': 'all', 'selected': 'selected'}, 'за все время');
      
      for(key in data.changes_by_years) 
        add_element('option', select, {value: data.changes_by_years[key]}, 'за '+ key +' год');
      
      var last_col_val;
      select.onchange = function()
      {
        if(this.value == 'all')
          last_col_val = data.change_for_period;
        else 
          last_col_val = this.value;
        
        $('last_col').innerHTML = Funds.prototype.digitFormat(last_col_val);
      };
    }




    $('pifInfo1').innerHTML = '<div style="padding-right: 20px;">' + (data.description) + '<ul><li><a href="/uploads/funds/'+  data.rules  +'">Правила доверительного управления</a></li></ul></div>';
		$('pifInfo1').style.display = t1.display;
		
		$('pifInfo2').innerHTML = (data.fund_condition);
		$('pifInfo2').style.display = 'none';

		str = '';
	},
	
	
	
	
	/*
	 * Цветовое кодирование параметров ПИФа (обрамляет цифры соответствующими тэгами)
	 *--------------------------------------------------------------------------*/	
	digitFormat: function(arg, fund_type, bracketsMode) {
		if(arg == 0)
        {
			tmp = 0;
			return tmp;
		}
		if(arg == null)
        {
            if(fund_type == 'Интервальный')
                return '';
			tmp = 'н/д';
			return tmp;
		}
		String(arg);
		var tmp = (arg.substr(0,1) == '-') ? ('<span>'+ arg +'%</span>') : ('<em>+'+ arg +'%</em>');
		if(bracketsMode)
		  tmp = ' (' +  + ')';
		return tmp;
	},

	
	
	/*
	 *  Перерисовывает таблицу
	 *--------------------------------------------------------------------------*/
	rewrawTable: function(tmp) {
		var str = '';
		var size = tmp.length;
		var debug = '';
		var data = {};
		
		// изза того что JSON-овский объект на верхнем уровне, это массив - делаем из него объект
		for(i=0; i<size; i++) {
			data[tmp[i].id] = tmp[i];
			// вытаскиваем id и ставим его ключём всей JSON-структуры
		}
		tmp = '';
		
		str = '<tr id="fund_details" style="display: none"><td colspan="5">&nbsp;</td></tr>';
		for(key in data) {
			debug += key + ' => '+ data[key].name + '\n';
			var tmp = 
			str += '<tr id="pif'+ key +'">';
			str += '<td>' + data[key].name + '</td>';
			str += '<td class="nowrap">' + data[key].current_price + '&nbsp;'+ this.digitFormat(data[key].change_for_day, data[key].fund_type) + '</td>';
			str += '<td class="nowrap">' + data[key].spa + '</td>';
			str += '<td>' + this.digitFormat(data[key].firstField) + '</td>';
			str += '<td>' + this.digitFormat(data[key].secondField) + '</td>';
			str += '</tr>';
		}
		
		
		$('shares').update(str);
		
		//data = '';
		//alert(debug+"\n\n"+data);
		
		this.tableProcess();
		
		str = '';
	},
	

	
	
	
	/*
	 * Рисует матрицу
	 *--------------------------------------------------------------------------*/	
	drawMatrix: function() {
		var str;
		str  = '<div class="block" style="padding-left: 25px; height: 360px;"><h2><em>Матрица выбора ПИФа</em> ';
		str += '<span onmouseover="tip_show(event, \'Данные изменения стоимости пая приведены для фондов «Финансист», «Титан», «Стоик», «Оплот»  за период с последнего рабочего дня календарного месяца, в котором завершено формирование фонда, по '+ dateLastForm +' г.\'); return false;" ';
		str += 'onmouseout="tip_hide(event)">*</span></h2><div id="matrixwrap" class="block"><div id="inmatrix" ';
		str += 'style="height: 100%; position: relative; "></div></div></div><div class="tooltip" style="padding: 10px 5px 5px 25px;">Данные изменения стоимости пая приведены для фондов «Финансист», «Титан», «Стоик», «Оплот»  за период с последнего рабочего дня календарного месяца, в котором завершено формирование фонда, по '+ dateLastForm +' г.</div>'
		
		$('matrix').update(str);
		
		var flashvars = {};
		var params = {};
		var attributes = {};
		
		flashvars.finansist = finansist;
		flashvars.titan = titan;
		flashvars.stoik = stoik;
		flashvars.oplot = oplot;
		
		params.menu = "false";
		params.wmode = "opaque";
		params.scale = "showAll";
		params.align = "middle";
		params.salign = "lt";
		params.bgcolor = "#F7F7F7";
		
		attributes.id = "graph";
		swfobject.embedSWF("/swf/matrix.swf", "inmatrix", "100%", "310", "8.0.0", "/js/swfobject/expressInstall.swf", flashvars, params, attributes);
		
	},
	
	
	
	
	/*
	 *  Сообщения об ошибке
	 *--------------------------------------------------------------------------*/	
	error: function(mode) {
		var text = '<h2 style="margin: 0">Ошибка</h2>Нет ответа от сервера';
		
		if(mode==1) {
			$('matrix').update('<div style="padding-top: 1em; text-align: center">'+  text  +'</div>');
			$('matrix').setStyle({backgroundImage: 'none'});
		}
		
		if(mode==3)
			$('fund_details').update('<td colspan="5" align="center">'+  text  +'</td>');
	},
	
	
	
	
	
	
	/*
	 * Навешивает обработчики событий на все элементы на вкладке "Обзор ПИФов"
	 *--------------------------------------------------------------------------*/	
	bindControls: function() {
		
		// id элементов управления на которые мы навешиваем отправку AJAX-запроса
		var controls = [ 'sort', 'sorttype', 'first', 'second' ];
		
		for(i=0; i<controls.length; i++) {
			
			// показываем
			if(controls[i] == 'first' || controls[i] == 'second') 
				$(controls[i]).style.display = 'inline';
			
			Event.observe(controls[i], 'change', function(event) {
		
				var URL = Funds.prototype.urlFormer('common');
				
				
				new Ajax.Request(URL, {
					method: 'post',
					onLoading: function() { Funds.prototype.loaderImage(3); },
					onFailure: function() { Funds.prototype.error(3); },
					onSuccess: function(transport) { Funds.prototype.rewrawTable(transport.responseText.evalJSON()); }
				});
				
			});
		}
		
	
		
		var controls = '';
		var controls = {
			fundtype1: 'click',
			fundtype2: 'click',
			fundtype3: 'click'
		}
		
		for(key in controls) {
			Event.observe(key, controls[key], function(event) {
			
				fundtype = Event.element(event).value;
				
				var URL = Funds.prototype.urlFormer('common');
				
				new Ajax.Request(URL, {
					method: 'post',
					onLoading: function() { Funds.prototype.loaderImage(3); },
					onFailure: function() { Funds.prototype.error(3); },
					onSuccess: function(transport) { Funds.prototype.rewrawTable(transport.responseText.evalJSON()); }
				});
				
			});
		}
	}

	
};

	
	
function togglePifDetails(mode, h, block) {

	if(mode==0) {
		var m1 = 1;
		var m2 = 2;
	}
	else if(mode == 1) {
		var m1 = 0;
		var m2 = 2;
	}
	else if(mode==2) {
		var m1 = 0;
		var m2 = 1;
	}
	$(h+mode).toggleClassName('active');
	$(block+mode).toggle();
//	Effect.toggle(block+mode, 'slide');
	
	
	$(h+m1).className='';
	$(block+m1).style.display='none';
	
	
	$(h+m2).className='';
	$(block+m2).style.display='none';
	
}