﻿function $(id)   { return document.getElementById(id); }
function go(url) { self.location.href = url } 

function get_over_src(src)   { return '/i/'+ src.replace(/(_current)?.[a-zA-Z]{3}$/, "").replace (/(http.*)\/i\//, "") + '_over.' + src.replace(/.*\./, ""); }
function get_normal_src(src) { return '/i/' + src.replace(/_over/, "").replace (/(http.*)\/i\//, ""); }

function img_over(img) { img.src = get_over_src(img.src); }
function img_out(img)  { img.src = get_normal_src(img.src); }

function preload_images()
{
  var img = new Object(); 
  var arguments = preload_images.arguments;

  for( i=0; i < arguments.length; i++) 
  {
    img[i]     = new Image();
    img[i].src = arguments[i];
  }

  var i = 0;
  var images = document.getElementsByTagName('img')
  while( image = images[i++] )
  {
    if( image.className.match(/over/) )
    {
      image.onmouseover = function() { this.src = get_over_src(this.src); } 
      image.onmouseout  = function() { this.src = get_normal_src(this.src); }  
    } 
  }
}

function test_on_js()
{
  var forms = document.getElementsByTagName('form');
  var i = 0;   

  while( form = forms[i++] )
  {
    var jsInput = document.createElement('input');

    jsInput.type  = 'hidden';
    jsInput.value = 'jsanabled';
    jsInput.name  = 'jstest';

    form.appendChild( jsInput );
  }
}

mtrace = function() 
{
  if( $('fast-navigation') )
  {
    var ul = getFirstNodeByTagName( $('fast-navigation'), 'UL' );

    for( var i=0; i < ul.childNodes.length ; i++ ) 
    {
      node = ul.childNodes[i];

      if( node.parentNode == ul && node.tagName == 'LI' )
      {
        node.onmouseover = function() { set_active_fn_frame(this); }
      }
    }
  }

  if (/MSIE (5|6|7).+Win/.test(navigator.userAgent))
  {
    i = 0;   
    inputs = document.getElementsByTagName('input');

    while( input = inputs[i++] )
    {
      if( input.className != "" && in_array( input.className, ['submit', 'change'] ) ) 
      {              
        input.onmouseover = function() { this.className += " iehover" }
        input.onmouseout  = function() { this.className = this.className.replace(new RegExp(" iehover"), "");    }
      }
    }
  }

  test_on_js();
  icalculate_all(); // tnx at least ff' new feature..
}

function icalculate_all() {} 

onload = function() { mtrace(); preload_images('/i/fnav/phone.jpg', '/i/fnav/internet_over.jpg', '/i/fnav/data-transfer_over.jpg', '/i/fnav/hot-suggestions_over.jpg', '/i/checkbox/on.gif', '/i/add_data_tranfser_point_over.gif', '/i/send_over.gif'); }

function set_active_fn_frame( thisLi )
{
  if( $('fast-navigation') )
  {
    var ul = getFirstNodeByTagName( $('fast-navigation'), 'UL' );

    for( var i=0; i < ul.childNodes.length ; i++ ) 
    {
      li = ul.childNodes[i];

      if( li.tagName == 'LI' && li.className.match(/current/) )
      {
        li.className = li.className.replace(new RegExp(" current"), "");  

        img = getFirstNodeByTagName(getFirstNodeByTagName(li,'A'), 'IMG');

        if( img.className == 'over')
          img.src = get_normal_src(img.src);
      }
    }
  }

  thisLi.className += ' current';

  img = getFirstNodeByTagName(getFirstNodeByTagName(thisLi,'A'), 'IMG');

  if( !img.src.match(/over/) )
    img.src = get_over_src(img.src);
}           

function getFirstNodeByTagName( parentNode, tagName ) 
{
  for( var i=0; i < parentNode.childNodes.length ; i++ ) 
  {
    node = parentNode.childNodes[i];

    if( node.tagName == tagName )
      return node ;
  }

  return 0;
}

function ivalidate(i,e)
{
  var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);

  if (e.ctrlKey || e.altKey || key < 32)
    return true;

  key = String.fromCharCode(key);

  return /\d/.test(key);
}

function icalculate(i)
{
  value = parseInt(i.value);

  if( isNaN(value) ) { value = 0; }

  var parts = i.id.split('_');

  prefix = parts[0];
  id     = parts[1];
  
  eval("var data    = "+prefix+"_data;");
  eval("var data_id = "+prefix+"_data_id;");

  cost_setup = data[i.id+'_cost_setup'] * value ;
  cost_month = data[i.id+'_cost_month'] * value ;

  $( prefix + '_tcs_' + id).innerHTML = cost_setup ;
  $( prefix + '_tcm_' + id).innerHTML = cost_month ;
  
  $( prefix + '_itcs_' + id).value    = cost_setup ;
  $( prefix + '_itcm_' + id).value    = cost_month ;

  var total_cost_setup = 0;
  var total_cost_month = 0;
  var s, m ;

  for( var n in data_id )
  {
    s = parseInt( $( prefix + '_itcs_' + data_id[n] ).value) ;
    m = parseInt( $( prefix + '_itcm_' + data_id[n] ).value) ;

    if( isNaN(s) ) s = 0;
    if( isNaN(m) ) s = 0;

    total_cost_setup += s ;
    total_cost_month += m ;
  } 

  $( prefix + '_total_cost_setup').innerHTML = total_cost_setup ;
  $( prefix + '_total_cost_month').innerHTML = total_cost_month ; 

  $( prefix + '_itotal_cost_setup').value = total_cost_setup ;
  $( prefix + '_itotal_cost_month').value = total_cost_month ; 
}

function vswitch( id )
{
  $(id).className = ( $(id).className == 'open' ? '' : 'open' );

  return false ;
}

function getClientWidth()  { return document.compatMode=='CSS1Compat' && !window.opera ? document.documentElement.clientWidth :  document.body.clientWidth;  }
function getClientHeight() { return document.compatMode=='CSS1Compat' && !window.opera ? document.documentElement.clientHeight : document.body.clientHeight; }

function get_ScrollOffsetX_ScrollOffsetY()
{
  var scrOfX = 0, scrOfY = 0;

  if(typeof(window.pageYOffset) == 'number') 
  {
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }

  return { 'ScrollOffsetX' : scrOfX, 'ScrollOffsetY': scrOfY };
}

function spw( pdata )
{
  if( pdata == undefined || pdata.lenght == 0)
    return ;

  var width = 0, height = 0, img_type = '', img_id = -1, img_title = '', lng = '', img_src = '';
  var arg_list = ['width', 'height', 'img_type', 'img_id', 'img_title', 'lng', 'img_src'];

  for (var i = 1, j=i-1; i < arguments.length; i++, j=i-1)
  {
    eval_type_str = arguments[i]

    if( typeof(arguments[i]) == 'string' )
      eval_type_str = '"' + arguments[i] + '"';
   
    eval( arg_list[j] + " = " + eval_type_str + ";");
  }

  // получаем ширину и высоту клиенской области и смещения по осям
  var cWidth = 0, cHeight = 0, ScrollOffsetX = 0, ScrollOffsetY = 0;

  cWidth  = getClientWidth();
  cHeight = getClientHeight();

  r = get_ScrollOffsetX_ScrollOffsetY();

  ScrollOffsetX = r['ScrollOffsetX'];
  ScrollOffsetY = r['ScrollOffsetY'];

  var pid = pdata[0];

  // если не найдено и заданное окно, добавляем автоматически
  if( !$(pid) )
  {
    var dPWindow = document.createElement('div');
    dPWindow.id  = pid;

    document.body.appendChild(dPWindow);

    $(pid).style.position   = "absolute";
    $(pid).style.display    = "none"; 
    $(pid).style.background = "#fff url(/i/preloader.gif) center no-repeat";

    if( img_id != -1 ) 
    {
      $(pid).style.border     = "3px solid gray";
      $(pid).style.zIndex     = "7777";

      if (/MSIE (5).+Win/.test(navigator.userAgent)){
        width += 7; height += 7; 
      }
    }
  }
  
  $(pid).onclick       = function() { cpw(pid); };
  $(pid).style.cursor  = "pointer";

  var left = parseInt((cWidth-width)/2)  + ScrollOffsetX ;
  var top  = parseInt((cHeight-height)/2) + ScrollOffsetY ;

  if( top < 0 )
    top = 0;

  // pdata - [pid, top_correction, left_corretin, top, left] 
  if( pdata[1] != undefined ) top  += parseInt(pdata[1]); 
  if( pdata[2] != undefined ) left += parseInt(pdata[2]); 
  if( pdata[3] != undefined ) top   = parseInt(pdata[3]) + ScrollOffsetY; 
  if( pdata[4] != undefined ) left  = parseInt(pdata[4]) + ScrollOffsetX; 

  // если overlay не найден, добавляем автоматически
  if( !$('overlay') )
  {
    var dOverlay = document.createElement('div');
    dOverlay.id = 'overlay';

    document.body.appendChild(dOverlay);
  }

  $('overlay').onclick       = function() { cpw(pid); };
  $('overlay').title         = "Закрыть окно";
  $('overlay').style.cursor  = "pointer";

  if (/MSIE (5|6).+Win/.test(navigator.userAgent))
  {
    var oHeight = cHeight ;

    if( document.body.scrollHeight && document.body.scrollHeight > cHeight )
      oHeight = document.body.scrollHeight ;
  
    // если картинка больше видимой высоты, добавляем отступ сверху
    if( height > cHeight )
    {
      overlay_correction = height - cHeight ;
      oHeight = oHeight + overlay_correction + 50;
    }

    $('overlay').style.height = oHeight ;
  }

  // если картинка больше видимой высоты, добавляем отступ сверху
  if( height > cHeight )
  {
    top = ScrollOffsetY + 20 ;
  }

  $('overlay').style.display = 'block';

  // если значение ненулевое, используем, если нулевое - использются стили из css
  if( top > 0)    $(pid).style.top    = top    + "px"; 
  if( left > 0)   $(pid).style.left   = left   + "px"; 
  if( width > 0)  $(pid).style.width  = width  + "px"; 
  if( height > 0) $(pid).style.height = height + "px"; 

  $(pid).style.display = 'block';

  // требуется показать картинку
  if( img_id != -1 ) 
  { 
    if( $('ptext') ) $('ptext').style.marginTop = (h+20) + "px";

    // если не найдена картинка
    if( !$('pimg') )
    {
      var image = document.createElement('img');

      image.id = 'pimg';

      $(pid).appendChild(image);
    }

    $('pimg').style.display = 'none';

    var hsrc = lng+'/p/'+img_type+'/'+img_id+'.img'; 

    if( img_src != '' )
      hsrc = src ;

    var isrc = 'http://'+window.location.host + hsrc;

    if( $('pimg').src != isrc )
    {
      $('pimg').onload = function() { this.style.display = 'block' }
      $('pimg').src    = hsrc ;
    }
    else
    {
      if( $('ptext') ) 
        $('ptext').style.marginTop = 0;

      $('pimg').style.display = 'block';
    }

    $('pimg').title = img_title ;

    if( $('ptext') ) $('ptext').innerHTML = img_title ;
  }

  return false ;
}

function cpw()
{
  // close popup window cpw('wid')
  if( arguments[0] != undefined && $(arguments[0]) )
    $(arguments[0]).style.display = 'none';

  $('overlay').style.display = 'none';
  $('overlay').style.height  = "100%";
}

function show_help( id )
{
  var ajax = new AjaxRequest();

  ajax.OnComplete(put_help_content);
  ajax.get("/ajax/help/"+id+".html");

  return false ;
}

function put_help_content( r )
{
  var content = r.content ;

  // контейнер для контента
  var dHelp = document.createElement('div');
  dHelp.id = 'help';

  document.body.appendChild( dHelp );

  spw( ['help', 0, 89, 137], 775);

  $('help').style.display = 'block';
  $('help').innerHTML     = content ;
}

// data-transfer functions
function dt_delete_point(id)
{
  var conteiner = $('data-tranfser-points');
  var pointdiv  = $('pblock' + id);

  conteiner.removeChild(pointdiv);

  return false ;
}

function add_data_tranfser_point()
{ 
  $('last-point-id').value = parseInt($('last-point-id').value)+1 ;

  var point_id  = $('last-point-id').value;
  var conteiner = $('data-tranfser-points');

  // контейнер блока
  var point_conteiner = document.createElement('div');
  point_conteiner.id  = "pblock" + point_id ; 

  // блок заголовка
  var dHeader = document.createElement('div');

  // заголовок
  var dHeaderSpan = document.createElement('span');
  dHeaderSpan.appendChild( document.createTextNode("Точка №" + point_id) );

  // ссылка удаления
  var dHeaderA = document.createElement('a');
  dHeaderA.appendChild( document.createTextNode("Удалить") );

  dHeaderA.href    = ''; 
  dHeaderA.onclick = function() { return dt_delete_point(point_id); }

  // сам блок заголовка
  dHeader.className = "header";

  dHeader.appendChild( dHeaderSpan );
  dHeader.appendChild( dHeaderA );

  point_conteiner.appendChild( dHeader );

  // таблица
  var eTable = document.createElement('table'); 

  eTable.className   = 'info wide';
  eTable.cellSpacing = "8"; 

  var eTBody = document.createElement('tbody'); 

  // Адрес подключения
  var eTr    = document.createElement('tr'); 
  var eTh    = document.createElement('th'); 
  eTh.appendChild( document.createTextNode("Адрес подключения") );

  var eTd    = document.createElement('td'); 
  var eInput = document.createElement('input'); 

  eInput.setAttribute("name", "p"+ point_id + "_address"); 
  eInput.setAttribute("value", ""); 

  eTd.appendChild( eInput );
  eTr.appendChild( eTh );
  eTr.appendChild( eTd );
  eTBody.appendChild( eTr );

  // Требуемая пропускная способность 
  var eTr    = document.createElement('tr'); 
  var eTh    = document.createElement('th'); 
  eTh.appendChild( document.createTextNode("Требуемая пропускная способность") );

  var eTd    = document.createElement('td'); 
  var eInput = document.createElement('input'); 

  eInput.setAttribute("name", "p"+ point_id + "_bandwidth"); 
  eInput.setAttribute("value", ""); 

  eTd.appendChild( eInput );
  eTr.appendChild( eTh );
  eTr.appendChild( eTd );
  eTBody.appendChild( eTr );

  // отбивка
  var eTr = document.createElement('tr'); 
  var eTh = document.createElement('th'); 
  var eTd = document.createElement('td'); 

  eTh.appendChild( document.createTextNode("\xA0") ); // &nbsp
  eTd.appendChild( document.createTextNode("\xA0") ); 
  eTr.appendChild( eTh );
  eTr.appendChild( eTd );

  eTBody.appendChild( eTr );

  // добавляем tbody
  eTable.appendChild( eTBody );
  
  // добавляем таблицу
  point_conteiner.appendChild( eTable );

  // вставка в общий контейнер
  conteiner.appendChild( point_conteiner );

  return false ;
}

function in_array(v, a) 
{
  for(var i = 0, l = a.length; i < l; i++) 
    if(a[i] == v)
       return true;  

  return false;  
} 
