﻿//Начало: Код для ajax
var tempImage = new Image();
var result;
var iTimerID = null;
var iImageLoadTimerId = null;
var iInterval = 1000;
var iImageLoadTimeWait = 40; 
var iLoopIndex = 0; 
var AssetsArray = new Array();
var colors = new Array("#ff00ff","#ff33ff","#ff66ff","#ff99ff","#ffccff","#ffffff","#ffff66","#ffcc66","#ff9966","#ff6666","#ff3366","#ff0066","#cc00ff","#cc33ff","#cc66ff","#cc99ff","#ccccff","#ccffff","#ccff66","#cccc66","#cc9966","#cc6666","#cc3366","#cc0066","#9900ff","#9933ff","#9966ff","#9999ff","#99ccff","#99ffff","#99ff66","#99cc66","#999966","#996666","#993366","#990066","#6600ff","#6633ff","#6666ff","#6699ff","#66ccff","#66ffff","#66ff66","#66cc66","#669966","#666666","#663366","#660066","#3300ff","#3333ff","#3366ff","#3399ff","#33ccff","#33ffff","#33ff66","#33cc66","#339966","#336666","#333366","#330066","#0000ff","#0033ff","#0066ff","#0099ff","#00ccff","#00ffff","#00ff66","#00cc66","#009966","#006666","#003366","#000066","#0000cc","#0033cc","#0066cc","#0099cc","#00cccc","#00ffcc","#00ff33","#00cc33","#009933","#006633","#003333","#000033","#3300cc","#3333cc","#3366cc","#3399cc","#33cccc","#33ffcc","#33ff33","#33cc33","#339933","#336633","#333333","#330033","#6600cc","#6633cc","#6666cc","#6699cc","#66cccc","#66ffcc","#66ff33","#66cc33","#669933","#666633","#663333","#660033","#9900cc","#9933cc","#9966cc","#9999cc","#99cccc","#99ffcc","#99ff33","#99cc33","#999933","#996633","#993333","#990033","#cc00cc","#cc33cc","#cc66cc","#cc99cc","#cccccc","#ccffcc","#ccff33","#cccc33","#cc9933","#cc6633","#cc3333","#cc0033","#ff00cc","#ff33cc","#ff66cc","#ff99cc","#ffcccc","#ffffcc","#ffff33","#ffcc33","#ff9933","#ff6633","#ff3333","#ff0033","#ff0099","#ff3399","#ff6699","#ff9999","#ffcc99","#ffff99","#ffff00","#ffcc00","#ff9900","#ff6600","#ff3300","#ff0000","#cc0099","#cc3399","#cc6699","#cc9999","#cccc99","#ccff99","#ccff00","#cccc00","#cc9900","#cc6600","#cc3300","#cc0000","#990099","#993399","#996699","#999999","#99cc99","#99ff99","#99ff00","#99cc00","#999900","#996600","#993300","#990000","#660099","#663399","#666699","#669999","#66cc99","#66ff99","#66ff00","#66cc00","#669900","#666600","#663300","#660000","#330099","#333399","#336699","#339999","#33cc99","#33ff99","#33ff00","#33cc00","#339900","#336600","#333300","#330000","#000099","#003399","#006699","#009999","#00cc99","#00ff99","#00ff00","#00cc00","#009900","#006600","#003300","#000000");
var spanAssetColor = 'AssetColor';
var spanChartBackColor = 'ChartBackColor';
var spanIndicatorColor = 'IndicatorColor';
var spanTextColor = "TextColor";
var divAssets = 'Assets';
var divIndicators = 'Indicators';
var divIndicators1 = 'Indicators1';
var pnlIndicators = 'pnlIndicators';
var pnlEditAsset = 'pnlEditAsset';
var divIndicatorParameters = 'IndicatorParameters';
var ddlAssetsName = 'ddlAssets'
var ddlStockExchangesName = 'ddlStockExchanges';
var cbxShowGridsName = 'cbxShowGrids';
var cbxIsOwnChartAreaName = 'cbxIsOwnChartArea';
var chartBackColor = null;
var assetColor = null;
var selectedIndicatorColor = null;
var chartTextColor = null;
var ddlStocksEditAsset = 'ddlStocksEditAsset';
var ddlAssetsEditAsset = 'ddlAssetsEditAsset';
var lblResult = 'lblResult';
function getAssetById(id)
{
   var asset = null;
   for (var i = 0; i < AssetsArray.length; i++)
   {
	   if (AssetsArray[i].id == id)
	   {
		   asset = AssetsArray[i];
		   break;
	   }
   } 
   return asset;   
}
function ShowPanelIndicators(i)
{
	//debugger
	var asset = AssetsArray[i];
	if (asset)
	{
		var pnl = $get(pnlIndicators);
		if (pnl)
		{
		    var strText = '<select class="select" id="ddlIndicators" onchange="ddlIndicatorsChange(this, \'' + asset.id + '\')" style="width:200px;">';
			strText += '<option selected="selected" value="0">Выберите индикатор</option>'
			for(var i = 0; i < indicators.length; i++ )
			{
			   strText += '<option value="'+indicators[i].id+'">'+indicators[i].name+'</option>'
			}
			strText += '</select>';
			pnl.innerHTML = strText;
			pnl.style.display = 'block';
			setText(divIndicatorParameters, '');
			setText(pnlEditAsset, '');
		}
	}
}
function ClearColorsList(lbl)
{
	if (lbl)
	{
		var lbl = $get(lbl);
		if (lbl)
		{
		   lbl.innerHTML = '';
		   lbl.style.display = 'none';
		} 
	}
}
function SetAssetColor(i, color)
{
    if (AssetsArray)
    {
		AssetsArray[i].color = color;
		ShowAssets();
	}
}
function CreateColorsList(elem, lbl, link, assetOrderByNumber)
{
	//debugger
	var lbl = $get(lbl);
	var link = $get(link);
	if (lbl && link)
	{
	   link.focus();
	   var k = 0;
	   var iNumber = 11;
	   var iWidth = 10;
	   var iHeight = 10;
	   var str = '<table style="width:170px;" class="form_table nopadding" border="0" cellpadding="0" cellspacing="0"><tr>';
       for (var j = 0; j < colors.length; j++)
	   {
			if (CheckColor(colors[j]))
			{
			    str += '<td><span style="background:' + colors[j] + '; float:left; width:' + iWidth + 'px; height:' + iHeight + 'px; margin:1px; border:solid 1px #000;" onmousedown="SelectColor(\'' + colors[j] + '\', \'' + elem.id + '\');' + ((assetOrderByNumber > -1) ? ('SetAssetColor(' + assetOrderByNumber + ', \'' + colors[j] + '\');') : '') + '" onmouseover="this.style.border=\'solid 1px #ffff00\'" onmouseout="this.style.border=\'solid 1px #000\';" title="' + colors[j] + '"><img border="0" width="1" height="1" src="/images/dot.gif" /></span></td>';
			   if (k ==  iNumber)
			   {
			      //str += '<div style="clear:both;"></div>';
			      str += '</tr><tr>';
			      k = 0;
			   }
			   else k++; 
			}
		}
		lbl.innerHTML = str+'</tr></table>';
		lbl.style.display='block';
    }
}
function CheckColor(color)
{
	color = color;
	if (AssetsArray != null && AssetsArray.length > 0)
	{
		for(var i = 0; i < AssetsArray.length; i++ )
		{
			if (AssetsArray[i].color == color)
			{
			   return false;
			}
		}
	}
    if (color == chartBackColor) return false;
    if (color == chartTextColor) return false;
    if (color == assetColor) return false;
   	for (var i = 0; i < selIndicators.length; i++)
	{
	   if (selIndicators[i].color == color)
	   {
		  return false;
	   }   
	}
	for (var i = 0; i < selIndicators1.length; i++)
	{
	   if (selIndicators1[i].color == color)
	   {
		  return false;
	   }   
	}
	return true;
}

function SetDefaultColor(elem, color)
{
	if (color) color = color.toLowerCase();
	if (color)
	{
        if (CheckColor(color))
	    {
	        SelectColor(color, elem);
		    return; 
	    }
	}
	var length = colors.length;
	var random_num = Rand(0, length);
	var i = 0;
    while (!CheckColor(colors[random_num]))
    {
        random_num = Rand(0, length);
        i++;
        if (i == length) break;//защита от зацикливания
	}
	SelectColor(colors[random_num], elem);
}
function Rand(minValue, maxValue)
{
    return Math.round(Math.random()* maxValue + minValue);    
}
function SelectColor(color, id)
{
   //debugger
   var div = $get(id);
   if (color) color = color.toLowerCase();
   if (div)
   {
      div.style.backgroundColor = color;
      if (spanChartBackColor == id)
      {
          chartBackColor = color;
          var assets = $get(divAssets);
          if (assets)
          {
             assets.style.backgroundColor = color;
          }
          var indicators = $get(divIndicators);
          if (indicators)
          {
             indicators.style.backgroundColor = color;
          }
          var indicators1 = $get(divIndicators1);
          if (indicators1)
          {
             indicators1.style.backgroundColor = color;
          }
      }
      if (spanAssetColor  == id)  assetColor = color;	
      if (spanIndicatorColor == id) selectedIndicatorColor = color
      if (spanTextColor == id) chartTextColor = color
   }
   ClearColorsList();
}
function HideJavascriptDisabledMessage()
{
	var lbl = $get('lblJavascriptDisabled');
	if (lbl != null) lbl.innerHTML = '';   
}
function AssetObject(assetid, stockid, color, showvolume, isownchartarea)
{
    this.assetid = assetid;
    this.stockid = stockid;
    this.showvolume = showvolume;
	this.color = (color)? color.toLowerCase():color;
	this.id = assetid +'_' + stockid;
	this.value = this.id +'_'+color+'_'+showvolume;
	this.isownchartarea = isownchartarea;
}
function GetAssetValue(obj)
{
	return obj.id +'_'+obj.color+'_'+obj.showvolume+'_'+obj.isownchartarea;
}
function EditAsset(id)
{
    //debugger
    var asset = getAssetById(id);
    if (asset)
    {
        ShowAssetPanel(asset);            
    }
}
function ChangeAsset(id)
{
    //debugger
    var asset = getAssetById(id);
    var stocksEditAsset = $get(ddlStocksEditAsset);
    var assetsEditAsset = $get(ddlAssetsEditAsset);
    var AssetId = assetsEditAsset[assetsEditAsset.selectedIndex].value; 
    var StockExchangeId = stocksEditAsset[stocksEditAsset.selectedIndex].value;
    if (asset && stocksEditAsset && assetsEditAsset)
    {
        if (CheckAssetExistence(AssetId, StockExchangeId)) return;
        var tempAsset = new AssetObject(AssetId, StockExchangeId, asset.color, ((StockExchangeId!=10)?asset.showvolume:false), asset.isownchartarea)
        for (var i = 0; i < AssetsArray.length; i++)
        {
           if (AssetsArray[i].id == id)
           {
               AssetsArray[i] = tempAsset;
               break;
           }
        } 
        for (var i = 0; i < selIndicators.length; i++)
        {
            if (selIndicators[i].assetId == id)
            {
               selIndicators[i].assetId = tempAsset.id;
            }       
        }
        for (var i = 0; i < selIndicators1.length; i++)
        {
            if (selIndicators1[i].assetId == id)
            {
               selIndicators1[i].assetId = tempAsset.id;
            }  
        }
        showIndicators(selIndicators);
        showIndicators(selIndicators1);
        ShowAssets();
        setText(pnlEditAsset, '');
        setText(pnlIndicators, '');
        setText(lblResult, '');
    }
}
function ShowAssetPanel(asset)
{
    var pnl = $get(pnlEditAsset);
    var ddl = $get(ddlStockExchangesName);
    if (pnl && ddl)
    {
        var strText = '<table border="0" class="noborder" cellpadding="2" cellspacing="0"><tr>';
        strText+='<td><select class="select" name="'+ddlStocksEditAsset+'" id="'+ddlStocksEditAsset+'" onchange="SetAssets(\''+ddlAssetsEditAsset+'\',\''+ddlStocksEditAsset+'\')" style="width:85px;">';
        for (var i = 0; i < ddl.options.length; i++)
        {
            strText+='<option value="'+ddl.options[i].value+'" '+((asset.stockid==ddl.options[i].value)?'selected':'')+'>'+ddl.options[i].text+'</option>';          
        }
        strText+='</select></td>';
        strText+='<td><select class="select" name="'+ddlAssetsEditAsset+'" id="'+ddlAssetsEditAsset+'" style="width:65px;">';
        for (var i = 0; i < Assets.length; i++)
        {
            if (Assets[i].sid == asset.stockid) strText+='<option value="'+Assets[i].id+'" '+((asset.assetid==Assets[i].id)?'selected':'')+'>'+Assets[i].name+'</option>';      
        }
        strText+='</select></td>';
        strText+='<td>';
        strText+='<input type="button" class="customSubmit" onclick="ChangeAsset(\''+asset.id+'\');return false;" id="btnEditAsset" value="Изменить">';
        strText+='</td>';
        strText+='</tr></table>'
        setText(pnlEditAsset, strText);
        setText(pnlIndicators, '');
        setText(divIndicatorParameters, '');
    }
}

function GetAssetObjectName(asset) {

   var ddlStockExchanges = $get(ddlStockExchangesName); 
   var strReturn = '';
   if (ddlStockExchanges)
   {
      for(var i = 0; i < Assets.length; i++)
      {
          if (Assets[i].id == asset.assetid && Assets[i].sid == asset.stockid)
          {
              strReturn = Assets[i].name;
              break;              
          }
      }
      for(var i = 0; i < ddlStockExchanges.length; i++)
      {
          if (ddlStockExchanges.options[i].value == asset.stockid)
          {
              strReturn += ' ('+ ddlStockExchanges.options[i].text+')';
              break;              
          }
      }
   }
   return strReturn;
}
function btnAddAsset_Click()
{
 
   var ddlAssets = $get(ddlAssetsName);
   var ddlStockExchanges = $get(ddlStockExchangesName);
   var cbxVolume = $get('cbxVolume');
   var cbxIsOwnChartArea = $get(cbxIsOwnChartAreaName);
   if (ddlAssets && ddlStockExchanges && assetColor && cbxVolume && cbxIsOwnChartArea)
   { 
      addAsset(ddlAssets.value, ddlStockExchanges.value, assetColor, cbxVolume.checked, cbxIsOwnChartArea.checked);      
   }
}
function CheckAssetExistence(AssetId, StockExchangeId)
{
    for(var i = 0; i < AssetsArray.length; i++)
    {
      if (AssetsArray[i].assetid == AssetId && AssetsArray[i].stockid == StockExchangeId)
      {
         setText(lblResult, "Такой тикер уже добавлен."); 
         return true;             
      }       
    }
    return false;
}
function addAsset(AssetId, StockExchangeId, color, showvolume, isownchartarea)
{
   //debugger
   var strText = '';
   setText(lblResult, ''); 
   if (AssetsArray.length == 6)
   {
      var strText = 'Максимальное количество тикеров на графике - 6 !';
   } 
   else 
   {
      if (CheckAssetExistence(AssetId, StockExchangeId)) return;
      AssetsArray[AssetsArray.length] = new AssetObject(AssetId, StockExchangeId, color, showvolume, isownchartarea);
      ShowAssets(); 
      SetDefaultColor(spanAssetColor);         
   }
   if (strText!='') setText(lblResult, strText); 
}
function removeAsset(j)
{
   setText(lblResult, '');
   var asset = AssetsArray[j];
   var count = selIndicators.length;
   for(var i = 0; i < count; i++)
   {
      if (selIndicators[i].assetId == asset.id)
      {
         selIndicators.splice(i,1);
         i--;
         count = selIndicators.length;
      }
   }
   showIndicators(selIndicators);
   count = selIndicators1.length;
   for(var i = 0; i < count; i++)
   {
      if (selIndicators1[i].assetId == asset.id)
      {
         selIndicators1.splice(i,1);
         i--;
         count = selIndicators1.length;
      }
   }
   showIndicators(selIndicators1);
   AssetsArray.splice(j,1); 
   ShowAssets();
   setText(pnlEditAsset, '');
}
function Asset_ShowVolume(elem, i)
{
	if (elem && AssetsArray)
	{
	   AssetsArray[i].showvolume = elem.checked;
	}
}
function Asset_IsOwnChartArea(elem, i)
{
	if (elem && AssetsArray)
	{
	   AssetsArray[i].isownchartarea = elem.checked;
	}
}
function AssetUp(i)
{
   var first = AssetsArray[i-1];
   var second = AssetsArray[i];
   AssetsArray[i-1] = second;
   AssetsArray[i] = first;
   ShowAssets();
}
function AssetDown(i)
{  
   var first = AssetsArray[i];
   var second = AssetsArray[i+1];
   AssetsArray[i+1] = first;
   AssetsArray[i] = second; 
   ShowAssets();
}
function ShowAssets() {

   var strText = '';
   var bShowVolume = false;
   for (var i = 0; i < AssetsArray.length; i++)
   {
       if (AssetsArray[i].stockid != 10)
       {
           bShowVolume = true;
           break;
       }
   }
   if (AssetsArray.length > 0) {
       strText = '<table border="0" class="noborder" cellpadding="1" cellspacing="0">';
       for (var i = 0; i < AssetsArray.length; i++) {
           var asset = AssetsArray[i];
           strText += '<tr style="vertical-align: middle;"><td>'
           var span_color = spanAssetColor + '_' + i;
           var colors_link = 'colors_link_' + i;
           var colors_list = 'colors_list_' + i
           strText += '<image id="' + span_color + '" class="colorpicker" style="background-color:' + asset.color + ';" onclick="CreateColorsList(this, \'' + colors_list + '\', \'' + colors_link + '\', ' + i + ');" width="10" height="10" src="/images/dot.gif" alt="Выберите цвет">'
           strText += '<a id="' + colors_link + '" href="#" onclick="return false;" onblur="ClearColorsList(\'' + colors_list + '\')"><span id="' + colors_list + '" class="colorslist"></span></a>'
           strText += '</td>'
           strText += '<td><input id="asset_' + '_' + i + '" name="asset_' + '_' + i + '" onclick = "removeAsset(' + i + '); return false;" type = checkbox title="Удалить" checked value = "' + GetAssetValue(asset) + '"></td>';
           strText += '<td style="text-align:left;"><a href="javascript:EditAsset(\'' + asset.id + '\');" style="color:' + asset.color + '" title="Редактировать тикер">' + GetAssetObjectName(asset) + "</a></td>";
           strText += '<td style="text-align:left;"><a href="javascript:onclick=ShowPanelIndicators(' + i + ');" style="color:' + asset.color + '" title="Добавить индикатор">Инд.</a></td>'
           if (bShowVolume) strText += '<td>';
           if (asset.stockid != 10) {
               strText += '<input id="asset_volume' + '_' + i + '" name="asset_volume' + '_' + i + '" onclick = "Asset_ShowVolume(this, ' + i + ');" type = checkbox title="Объемы" ' + ((asset.showvolume) ? 'checked' : '') + ' value = "' + GetAssetValue(asset) + '">';
               strText += '<span style="color:' + asset.color + '">&nbsp;Объемы</span>';
           }
           if (bShowVolume) strText += '</td>';
           strText += '<td><input id="isownchartarea_' + i + '" name="isownchartarea_' + i + '" onclick = "Asset_IsOwnChartArea(this, ' + i + ');" type = checkbox title="На отдельном графике" ' + ((asset.isownchartarea) ? 'checked' : '') + ' value = ""></td>';
           strText += '<td>';
           if (AssetsArray.length > 1) {
               if (i != 0) {
                   strText += '<a href="javascript:AssetUp(' + i + ')"><img border="0" src="/images/up_arrow.gif" alt="Вверх"></a>'
               }
               if (i + 1 != AssetsArray.length) {
                   strText += '<a href="javascript:AssetDown(' + i + ')"><img border="0" src="/images/down_arrow.gif" alt="Вниз"></a>'
               }
           }
           strText += '</td>';
           strText += '</tr>';
           //strText += '</div>';
       }
       strText += '</table>';
   }
   setText(divAssets, strText);
   setText(divIndicatorParameters, '');
   setText(pnlIndicators, '');
}
function CreateTable(strTable)
{
   var lblTable = $get('lblTable');
   if (lblTable && strTable != null && strTable.length > 1)
   {
       var strTemp = '<table border=0 class="common center" cellpadding=0 cellspacing=0 height=30><tr align=\"center\"><th width="20%"><b>Тикер</b></th><th width="20%"><b>Дата</b></th><th width="10%"><b>Изменение</b></th><th width="15%"><b>% Изменение</b></th><th width="15%"><b>Цена</b></th><th width="20%"><b>Объем сделок</b></th></tr>';
      strTemp+= strTable.replace(/\[\[/g, "<tr class=\"even\"><td>").replace(/\[/g,"<tr align=\"center\"><td>").replace(/\|/g,"</td><td>").replace(/\+/g,"</td><td style=\"color:green;\">").replace(/\_/g,"</td><td style=\"color:red;\">").replace(/\^/g,"").replace(/\]/g,"</td></tr>");  
      strTemp+= '</table>'
      lblTable.innerHTML = strTemp; 
   }
}
function CheckIsOnline(bIsActive)
{ 
    var cbx = $get('cbxIsOnline');
    if (bIsActive)
    {
      if (cbx.disabled)
      {
         cbx.parentElement.disabled = false;
         cbx.disabled = false;
      }
    } 
    else
    {
      if (!cbx.disabled) 
      {
         if (cbx.checked)
         { 
            cbx.checked = false;
            SetUpdateStatus();
         }
         cbx.parentElement.disabled = true;
         cbx.disabled = true;
      } 
    }
    if (cbx.checked) SetOnlineUpdate();
}
function SetUpdateStatus(strMessage)
{
   var lblUpdateStatus = $get('lblUpdateStatus');
   if (lblUpdateStatus != null)
   {
      if (strMessage != null && strMessage.length > 1)
      {
         lblUpdateStatus.innerHTML = strMessage;
      }
      else lblUpdateStatus.innerHTML = '';
   }
}
function ClearTimeouts()
{
   clearOnlineUpdateInterval();
   ClearImageLoadTimer(); 
}
function DisplayConfirmationDialogBox(message)
{
    ClearTimeouts();
    window.alert(message);
} 
function ClearImageLoadTimer()
{ 
    if (iImageLoadTimerId != null)
    {
        window.clearInterval(iImageLoadTimerId);
        iImageLoadTimerId = null; 
    }
    iLoopIndex = 0;
}
function LoadChartImage(obj, result) 
{ 
    if (obj.complete) 
    { 
        ClearTimeouts();
        //if (obj.fileSize < 0) 
        //{ 
            //Сбой загрузки изображения
        //    DisplayConfirmationDialogBox("Сбой при загрузке графика!");
        //} 
        //else 
        //{ 
        //Success
        var ChartImage = $get('ChartImage');
        ChartImage.src = obj.src;
        CreateTable(result.Table);
        CreateImageMap(result.MapArea);
        iTop = result.Top;
        iLeft = result.Left;
        width = result.Width;
        height = result.Height;
        SetUpdateStatus(result.UpdateStatusMessage);
        //} 
    } 
    else 
    { 
        iLoopIndex++; 
        if (iLoopIndex > iImageLoadTimeWait) 
        { 
            //Error 
            ClearImageLoadTimer();
            DisplayConfirmationDialogBox("Время загрузки графика истекло!");
        } 
    } 
} 
function CreateImageMap(strImageMap)
{
   if (strImageMap != null && strImageMap.length > 1)
   {
      var ImageMap = $get('ChartImageMap');
      ImageMap.innerHTML = strImageMap.replace(/\[/g,"<area shape=\"rect\" coords=\"").replace(/\|/g,"\" onmouseover=\"doHint(event, this, ").replace(/\]/g,");\" />"); 
   }
}
function btnUpdate_OnClick()
{
   GetChart();                      
}
function cbxIsOnline_OnClick()
{
    //debugger
    var cbx = $get('cbxIsOnline');
    if (cbx.checked)
    {
       SetOnlineUpdate();
    }
    else
    {
       ClearTimeouts();
       SetUpdateStatus();
    }
} 
function clearOnlineUpdateInterval()
{
    if (iTimerID != null)
    {
       window.clearTimeout(iTimerID);
       iTimerID = null;
    }                       
}
function SetOnlineUpdate()
{
   ClearTimeouts();
   iTimerID = window.setTimeout("GetChart();", iInterval);
}
function GetChartOnFailed(error) 
{
   ClearTimeouts();
   // debugger
   DisplayConfirmationDialogBox("Ошибка при подключении к серверу!");
   //DisplayConfirmationDialogBox("Ошибка при подключении к серверу!" + error.get_message());
}
function GetChartOnSucceeded(resultObj, userContext, methodName) 
{        
   ClearTimeouts();
   var lblUpdateStatus = $get('lblUpdateStatus');
   if (resultObj.ErrorMessage != null) 
   {                       
       setText(lblResult, resultObj.ErrorMessage);
   }
   else if (resultObj.IsChartUpdate)
   {
       setText(lblResult,'');
   }
   if (lblUpdateStatus != null)
   {
       if (resultObj.UpdateStatusMessage != null) 
       {                       
          if (resultObj.IsChartUpdate)
             SetUpdateStatus('Идет обновление графика.');
          else
             SetUpdateStatus(resultObj.UpdateStatusMessage);
       }
       else SetUpdateStatus();
   }
   if (resultObj.IsChartUpdate && resultObj.ImageUrl != null)
   {
      tempImage.src = resultObj.ImageUrl;
      result = resultObj;
      iImageLoadTimerId = window.setInterval("LoadChartImage(tempImage, result)", 1000);
   }
   if (resultObj.ImageUrl == null) {
	  SetUpdateStatus('Ошибка при обновление графика.');	
   }
   
}
function GetChart() {

   if (!(AssetsArray != null && AssetsArray.length > 0))
   {
      //debugger
      ClearTimeouts();
      setText(lblResult, 'Не выбран не один тикер !');  
      return false;
   }     
   var ddlPeriod = $get('ddlPeriod');
   var ddlChartType = $get('ddlChartType');
   var cbxVolume = $get('cbxVolume');
   var cbxShowGrids = $get(cbxShowGridsName);
   var strAssets = null;
   
   for (var i = 0; i < AssetsArray.length; i++)
   {
       if (strAssets == null)
       {
          strAssets = GetAssetValue(AssetsArray[i]); 
       }
       else 
       {  
          strAssets += "|"+GetAssetValue(AssetsArray[i]);
       }                         
   }
   var strIndicators = null;
   for (var i = 0; i < selIndicators.length; i++)
   {
       if (strIndicators == null)
       {
          strIndicators = getValue(selIndicators[i])+'_'+i; 
       }
       else 
       {  
          strIndicators += "|" + getValue(selIndicators[i])+'_'+i;
       }                         
   }
   for (var i = 0; i < selIndicators1.length; i++)
   {
       if (strIndicators == null)
       {
          strIndicators = getValue(selIndicators1[i])+'_'+i; 
       }
       else 
       {  
          strIndicators += "|" + getValue(selIndicators1[i])+'_'+i;
       }      
   }
  SetUpdateStatus('Подключение к серверу.');

   PageMethods.GetChartMultipleAssetsData(strAssets, ddlChartType.value, ddlPeriod.value, chartBackColor, chartTextColor, cbxShowGrids.checked,  strIndicators, GetChartOnSucceeded, GetChartOnFailed);
}
//Конец: Код для ajax
var bounds;
//Данные браузера
var b = new browserObj()
function browserObj() {
	this.platform = ''
	this.version = 0
	this.isNav4 = false
	this.isNav6 = false
	this.isIE4 = false
	this.isIE = false
	this.isSafari = false
	this.isMajor = false
	this.isMinor = false
	this.isOpera = navigator.appName.toLowerCase().indexOf('opera') != -1;
	
	if (navigator.appVersion.indexOf('Mac') != -1) {
		this.platform = "mac"
	} else {
		this.platform = "pc"
	}
	
	//if (this.platform == 'mac') { alert(navigator.appName + ',' + navigator.appVersion + ',' + navigator.userAgent) }
	
	//var isNav4, isNav6, isIE4, isMajor, isMinor;
	if (navigator.appName.toLowerCase().indexOf('safari') != -1) {
		this.isMajor = true
		this.isSafari = true
	} 
	else if (this.isOpera)
	{
	    this.isMajor = true;
	}
	else if ((navigator.appName.indexOf('Netscape') != -1)) {
		if (navigator.appVersion.charAt(0) > "4") {
			this.version = 6
			this.isNav6 = true
			this.isMajor = true
		} else {
			this.version = 4
			this.isNav4 = true;
			this.isMinor = true
		}
	} else {
		this.isIE = true
	
		uA = navigator.userAgent.toLowerCase()
		ind = uA.indexOf("msie")
		uA = uA.substr(ind, uA.length)
		ind = uA.indexOf(";")
		uA = parseFloat(uA.substr(0, ind).replace("msie", ""))
		if (uA >= 5) {
			this.version = uA
			this.isMajor = true
		} else {
			this.version = uA
			this.isIE4 = true;
			this.isMinor = true
		}
	}
}

function addOption( selectElement, text, value)
{
	el = (b.isNav4) ? new Option() : document.createElement("OPTION")
	el.text = text
	el.value = value
	if (!b.isIE) {
		selectElement.options[selectElement.options.length] = el
	} else {
		selectElement.options.add(el)
	}

}   

function clearSelect( element)
{
	while(element.length > 0) {
		if (!b.isIE) {
			element.options[element.options.length-1] = null
		} else {
			element.options.remove(0)
		}
	}
}

function toggle( elementName, visible, setText)
{
	//debugger
	if ( b.isMajor)
	{
		var element
		if ( element = document.getElementById(elementName))
		{
			if ( setText)
			{
				if (element.tagName != "INPUT" )
					element.innerHTML = setText;
				else {
					element.value = setText;
					if (b.isOpera)
					{
						element.value = setText;
					}	
				}	
			}
			element.style.display = visible ? "inline" : "none" 
		}
	}	
}

function setText( elementName, text)
{
	if ( b.isMajor)
	{
		var element
		if ( element = document.getElementById(elementName))
		{
			if ( text == null)
				text = '';

			if (element.tagName != "INPUT" )
			{
				if (text == '') element.style.display='none';
				else element.style.display='block';
				element.innerHTML = text;
			}
			else {
				element.value = text;
				if (b.isOpera)
				{
					element.value = text;
				}	
			}	
		}
	}	
}
// JScript File
var Assets = new Array();
function Asset(id,name, sid)
{
    this.id = id;
    this.name = name;
    this.sid =  sid; 
}
function SetAssets(id, source)
{
   element = document.getElementById(id);
   elementSource = document.getElementById(source);
   value = elementSource[elementSource.selectedIndex].value;   
   clearSelect(element); 
   for (var i = 0; i < Assets.length; i++)
   {
       if (Assets[i].sid == value)
       {
           addOption(element, Assets[i].name, Assets[i].id);
       }   
   }
   //отключение возможности выбора объемов в случае выбора индексов
   if (id != ddlAssetsEditAsset) CheckBoxDisabled((value == 10));
}
function CheckBoxDisabled(disabled)
{
   var checkbox = $get('cbxVolume');
   if (checkbox != null)
   {
       if (disabled)
       {
           checkbox.checked = false;
           checkbox.disabled = true; 
       }
       else checkbox.disabled = false;
   }
}
//Начало: Код для динамического меню для выбора индикаторов.
var indicators = new Array();
var selIndicators = new Array();
var selIndicators1 = new Array();
var priceType = new Array('Hi','Low','Open', 'Close')
function indicator(id, name, shortname, period, pricetype, shift, period1, period2, type, color, assetId)
{
    this.id = id;
	this.assetId = assetId;
	this.name = name;
	this.shortname = shortname;
	this.period = period;
	this.pricetype = pricetype;
	this.type = type;
	this.shift = shift;
	this.period1 = period1;
	this.period2 = period2;
	this.color = (color)? color.toLowerCase():color;
}
function Count(count1, count2)
{
    this.count1 = count1;
    this.count2 = count2;
}
function CountTypes(assetId)
{
   var count1 = 0, count2 = 0;
   for(var i = 0; i < selIndicators.length; i++)
   {
      if (selIndicators[i].assetId == assetId) count1++; 
   }
   for(var i = 0; i < selIndicators1.length; i++)
   {
      if (selIndicators1[i].assetId == assetId) count2++; 
   }
   return new Count(count1, count2); 
}
function getValue(ind)
{
   return (ind.id+'_'+(ind.period==null?'':ind.period)+'_'+(ind.pricetype==null?'':ind.pricetype)+'_'+(ind.shift==null?'':ind.shift)+'_'+(ind.period1==null?'':ind.period1)+'_'+(ind.period2==null?'':ind.period2)+'_'+(ind.color==0?'':ind.color)+'_'+ind.assetId);
}
function getName(ind)
{
    var str = '';
    var strReturn = ind.shortname;
	if (ind.period)
	{
	   str = ind.period;
	   if(ind.pricetype)
	   {
	      str+=','+ priceType[ind.pricetype-1];
       }	 
	   if(ind.shift)
	   {
	      str+=','+ ind.shift;
	   }             
	}
	if (ind.period1)
	{
	   str = ind.period1;
	}
	if (ind.period2)
	{
	   str += ','+ind.period2;
	}
	if (str != '') strReturn+='('+str+')'
	var asset = getAssetById(ind.assetId);
	if (asset) strReturn+=' '+GetAssetObjectName(asset); 
	return strReturn;
}
function addIndicator(assetId, id, i)
{
   var temp = new Array();
   var reg=/^\d+$/; 
   var ind = getIndicatorById(id);
   if (ind)
   {
      var isEdit = (i>=0);
      temp[0] = new indicator(ind.id,ind.name,ind.shortname,ind.period,ind.pricetype,ind.shift, ind.period1, ind.period2, ind.type, ind.color, assetId);
      var count = CountTypes(assetId);
      var strText = '';
      if ((!isEdit) && ind.type == 1 && count.count1 == 4)
      {
          strText = 'Максимальное количество индикаторов на основном графике - 4.';
      }
      else if ((!isEdit)  && ind.type == 2 && count.count2 == 3 )
      {
          strText = 'Максимальное количество дополнительных индикаторов - 3.';
      }
      else
      {
          var tempSelIndicators
          if (ind.type == 1) tempSelIndicators = selIndicators;
          else tempSelIndicators = selIndicators1;
          if (temp[0].period)
          {
              element = document.getElementById('txtPeriod_'+id);
              if (element)
              {
                 if (reg.test(element.value)&& element.value > 0)
                 {
                    temp[0].period = element.value;
                 }
                 else
                 {
                    window.alert('Значение "период" должно быть больше 0 и целым числом!');
                    element.focus();
                    return false;
                 }
              } 
          }
          if(temp[0].pricetype)
          {
             element = document.getElementById('ddlPriceType_'+id);
             if (element) temp[0].pricetype = element[element.selectedIndex].value
          }
          if(temp[0].shift)
          {
             element = document.getElementById('txtShift_'+id);
             if (element)
             { 
                if (reg.test(element.value) && element.value > 0)
                {
                   temp[0].shift = element.value;
                }
                else
                {
                   window.alert('Значение "cдвиг%" должно быть больше 0 и целым числом!');
                   element.focus();
                   return false;
                }
             } 
          }
          if(temp[0].period1)
          {
             element = document.getElementById('txtPeriod1_'+id);
             if (element) 
             {
                if (reg.test(element.value) && element.value > 0)
                {
                   temp[0].period1 = element.value;
                }
                else
                {
                   window.alert('Значение "период 1" должно быть больше 0 и целым числом!');
                   element.focus();
                   return false;
                }
             }
          }
          if(temp[0].period2)
          {
             element = document.getElementById('txtPeriod2_'+id);
             if (element) 
             {
                if (reg.test(element.value) && element.value > 0)
                {
                   temp[0].period2 = element.value;
                }
                else
                {
                   window.alert('Значение "период 2" должно быть больше 0 и целым числом!');
                   element.focus();
                   return false;
                }
             }
          }
          if (ind.color != 0) temp[0].color =  selectedIndicatorColor;
          else temp[0].color = 0;
          if (isEdit) 
          {
             tempSelIndicators[i] = temp[0]; 
          }
          else 
          {
             tempSelIndicators[tempSelIndicators.length] = temp[0];
          }
          showIndicators(tempSelIndicators);
      }
      if (strText!='')
      {
         setText(divIndicatorParameters, strText);
      }
      else
      {
		  setText(divIndicatorParameters, '');
		  setText(pnlIndicators, '');
		  //if (isEdit) showIndicatorParameters(temp[0], i);
		  //else showIndicatorParameters(ind);
      }
   }  
}
function getIndicatorById(id)
{
   var ind;
   for (var i = 0; i < indicators.length; i++)
   {
	   if (indicators[i].id == id)
	   {
		   ind = indicators[i];
		   break;
	   }
   } 
   return ind;   
}
function showIndicators(array)
{
   //debugger
   var strText = '';
   if (array.length > 0) {
       strText = '<table border="0" class="noborder nopadding" cellpadding="0" cellspacing="0">'
       for (var i = 0; i < array.length; i++) {
           var ind = array[i];
           strText += '<tr><td style="text-align:left;">'
           strText += '<input id="ind_' + ind.id + '_' + i + '" name="ind_' + ind.id + '_' + i + '" style="vertical-align: middle; margin-right: 2px; margin-left: 1px;" onclick = "removeIndicator(' + ind.id + ',' + i + '); return false;" type = checkbox title="Удалить" checked value = "' + getValue(ind) + '">';
           strText += '</td><td style="text-align:left;vertical-align: middle;">';
           if (ind.color != 0) //ограничение для rangecharts
           {
               strText += '<a title="Изменить настройку" style="font-size:-2;color:' + ind.color + '" href="javascript:onclick=editIndicator(' + ind.id + ',' + i + ')">' + getName(ind) + '</a>';
           }
           else
               strText += '<a title="Изменить настройку" href="javascript:onclick=editIndicator(' + ind.id + ',' + i + ')">' + getName(ind) + '</a>';
           strText += '</td><td style="text-align:left;vertical-align: middle;">';
           if (array.length > 1 && ind.type == 2) {
               if (i != 0) {
                   strText += '<a href="javascript:Up(' + i + ')"><img border="0" src="/images/up_arrow.gif" alt="Вверх"></a>'
               }
               if (i + 1 != array.length) {
                   strText += '<a href="javascript:Down(' + i + ')"><img border="0" src="/images/down_arrow.gif" alt="Вниз"></a>'
               }
           }
           strText += '</td></tr>';
       }
       strText += '</table>';
   }
   if (array == selIndicators) setText("Indicators", strText);
   else setText("Indicators1", strText);
}
function Up(i)
{
   var first = selIndicators1[i-1];
   var second = selIndicators1[i];
   selIndicators1[i-1] = second;
   selIndicators1[i] = first;
   showIndicators(selIndicators1);
}
function Down(i)
{  
   var first = selIndicators1[i];
   var second = selIndicators1[i+1];
   selIndicators1[i+1] = first;
   selIndicators1[i] = second; 
   showIndicators(selIndicators1)
}
function editIndicator(id, i)
{
   var ind = getIndicatorById(id);
   if (ind.type == 1) tempArray = selIndicators;
   else tempArray = selIndicators1;
   showIndicatorParameters(tempArray[i], i);
}
function removeIndicator(id, i)
{
   var tempArray;
   var ind = getIndicatorById(id);
   if (ind.type == 1) tempArray = selIndicators;
   else tempArray = selIndicators1;
   tempArray.splice(i,1); 
   showIndicators(tempArray);
   setText(divIndicatorParameters, '');
   setText(pnlIndicators, '');
}
function showIndicatorParameters(ind, i)
{
    var count = CountTypes(ind.assetId);
    var strTable;
    var isEdit = (i >= 0);
    var iColspan = 0;
    if ((!isEdit) && ind.type == 1 && count.count1 == 4)
    {
        strTable = 'Максимальное количество индикаторов на основном графике - 4.';
    }
    else if ((!isEdit) && ind.type == 2 && count.count2 == 3 )
    {
        strTable = 'Максимальное количество дополнительных индикаторов - 3.';
    }
    else
    {
        strTable = '<table border=0 class="noborder width_100" cellpadding=3 cellspacing=0 height="30" class="width_100">';
        var strTr = '<tr valign=top>';
        if (ind.period)
        {
          iColspan++;
          strTr+='<td><b>Период:</b>&nbsp;&nbsp;<input class="text" id="txtPeriod_'+ind.id+'" type="text" value="'+ind.period+'" maxlength="3" style="width:25px;" /></td>';
        }
        if(ind.pricetype)
        {
          iColspan++;
          strTr+='<td><b>Цена:</b>&nbsp;&nbsp;<select class="select" id="ddlPriceType_'+ind.id+'" style="width:70px;">';
          strTr+='<option value="1"'+((ind.pricetype==1)?' selected ':'') +'>Hi</option>';
          strTr+='<option value="2"'+((ind.pricetype==2)?' selected ':'') +'>Low</option>';
          strTr+='<option value="3"'+((ind.pricetype==3)?' selected ':'') +'>Open</option>';
          strTr+='<option value="4"'+((ind.pricetype==4)?' selected ':'') +'>Close</option></select></td>';
        }
        if (ind.shift)
        {
          iColspan++;
          strTr+='<td><b>Сдвиг%</b>&nbsp;&nbsp;<input class="text" id="txtShift_'+ind.id+'" type="text" value="'+ind.shift+'" maxlength="3" style="width:30px;" /></td>';
        }
        if(ind.period1)
        {
          iColspan++;
          strTr += '<td><b>Период 1</b>&nbsp;&nbsp;<input class="text" id="txtPeriod1_' + ind.id + '" type="text" value="' + ind.period1 + '" maxlength="3" style="width:30px;" /></td>';
        }
        if(ind.period2)
        {
          iColspan++;
          strTr += '<td><b>Период 2</b>&nbsp;&nbsp;<input class="text" id="txtPeriod2_' + ind.id + '" type="text" value="' + ind.period2 + '" maxlength="3" style="width:30px;" /></td>';
        }
        var strSelect = ''
        if (ind.color != 0)//ограничение для rangecharts
        {
            
             strSelect= '<img id="'+spanIndicatorColor+'" class="colorpicker" onclick="CreateColorsList(this, \'lblIndicatorColors\', \'indicatorscolorslink\')" width="10" height="10" src="/images/dot.gif" alt="Выберите цвет для индикатора"  />'
             strSelect+='<a id="indicatorscolorslink" href="#" onclick="return false;" onblur="ClearColorsList(\'lblIndicatorColors\')">'
             strSelect += '<span id="lblIndicatorColors" class="colorslist">'
             strSelect += '</span></a>&nbsp;Цвет индикатора&nbsp;' 
        }
        strTr+='</tr>';
        strTable+=strTr;
        strTable+='<tr valign="middle"><td colspan="'+iColspan+'"><table border="0" class="width_100" cellspacing="0" cellpadding="0"><tr valign="top"><td align="left" width="50%">'+strSelect+'</td><td align="left"><input name="btnAdd" type="button" value="'+((isEdit)?'Изменить':'Добавить')+'" onclick="addIndicator(\''+ind.assetId+'\','+ind.id+((isEdit)?(','+i):'')+');" class="customSubmit"/></td></tr></table></td></tr>';
        strTable+='</table>';
    }
    setText(divIndicatorParameters, strTable);
    setText(pnlEditAsset, '');
    if (isEdit) setText(pnlIndicators, '');
    if (!isEdit) SetDefaultColor(spanIndicatorColor);
    else SelectColor(ind.color, spanIndicatorColor);
}
function ddlIndicatorsChange(element, assetId)
{  
   var id = element[element.selectedIndex].value;
   if (id > 0)
   {
      var ind = getIndicatorById(id);
      if (ind)
	  {
         ind.assetId = assetId;
         showIndicatorParameters(ind);
      }
   }
   else setText(divIndicatorParameters, '');
}
//Конец: Код для динамического меню для выбора индикаторов.
var iLeft, iTop, width, height, chartName;
var bounds;
function layer(layerName){
 //DOM1
  if(document.getElementById) return document.getElementById(layerName)
 //MSIE4
  else if(document.all) return document.all[layerName]
 //Netscape 4
  else if(document.layers) return document.layers[layerName]
 //неподдерживаемый браузер
  return null
}
function layerStyle(layerObject){
  if(layerObject.style) return layerObject.style //доступ через style
  return layerObject //доступ без style
}
function getBodyScrollTop()
{
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}
function getBodyScrollLeft()
{
	return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}
function getElementPosition(elem)
{
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
	
    var l = 0;
    var t = 0;
	
    while (elem)
    {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }
    return {"left":l, "top":t, "width": w, "height":h};
}
function Show(e)
{
   var bIsShow = false;
   var lineY = layer('lineY');
   var lineX = layer('lineX');
   var x = e.clientX;
   var y = e.clientY;
   var scrollLeft = getBodyScrollLeft(); 
   var scrollTop = getBodyScrollTop();
   if (!bounds) 
   {
       var img = document.getElementById(chartName); 
       bounds = getElementPosition(img);
   }
   var Y1 = x + scrollLeft - 1;
   var X = bounds.left + iLeft; 
   var Y =  bounds.top + iTop;
   var X1 = y + scrollTop - 1;
   layerStyle(lineY).top = (Y+'px')
   layerStyle(lineY).left = (Y1+'px');
   layerStyle(lineY).height = (height+'px'); 
   bIsShow = ((X < Y1) && (Y1 < (X+width)));
   layerStyle(lineX).left = (X+'px');
   layerStyle(lineX).top = (X1+'px');
   layerStyle(lineX).width = (width+7)+'px'; 
   bIsShow = (bIsShow && ((Y < X1) && (X1 <(Y+height)))) ;
   if (bIsShow)
   {
      layerStyle(lineY).display = "block";
      layerStyle(lineX).display = "block";
      
   }
   else
   {
      layerStyle(lineY).display  = "none";
      layerStyle(lineX).display = "none";
   }
}
function Hide(e)
{
   bounds = null;
   setText("hint",'');
   Show(e);
}
function doHint(event, image, date, high, low, open, close, volume)
{
	var width = 210;
	if (!b.isIE)
	{
	    Show(event);	
	}
	if ( date == null)
	{
		setText("hint");
	}
	else
	{
		var strText = "<table border=0 cellpadding=2 cellspacing=0 width=\"'+width+'\"><tr><td colspan=2><nobr>" + date + "</nobr></td></tr><tr><td><nobr>Макс.: " + high + "</nobr></td><td><nobr>Мин.: " + low + "</nobr></td></tr><tr><td><nobr>Откр.: " + open + "</nobr></td><td><nobr>Закр.: " + close + "</nobr></td></tr>" + ((volume.length > 1) ? ("<tr><td colspan=\"2\"><nobr>Объем: " + volume + "</nobr></td></tr>") : '') + "</table>";
		setText("hint", strText)
		var hint = $get('hint');
		var scrollLeft = getBodyScrollLeft(); 
        var scrollTop = getBodyScrollTop();
        var x = event.clientX + scrollLeft + 7;
        var y = event.clientY + scrollTop + 7;
        if (x + width > document.body.offsetWidth - 150) {
        	x = x - width - 7;
        }
        layerStyle(hint).left = x + 'px';
        layerStyle(hint).top = y + 'px';
	}
}
function hideHint(event, image)
{
    setText("hint",'');
}

