﻿function toggleDiv(link, e, focusOnlyEditableElement) 
{
    Event.stop(e);
	var divId = link.getAttribute("href").match(/[-_\w]+$/i)[0];
	var div = $(divId);
	if(Element.hasClassName(link, "expand")) 
	{
		Element.removeClassName(link, "expand");
		Element.addClassName(link, "collapse");
		div.style.display = "block";
		// устанавливаем фокус на первый элемент в показанном диве
		(focusOnlyEditableElement) ? Element.focusFirstAccessibleElement(div, true) : Element.focusFirstAccessibleElement(div); 
	}
	else if(Element.hasClassName(link, "collapse")) 
	{
		Element.removeClassName(link, "collapse");
		Element.addClassName(link, "expand");
		div.style.display = "none";
	}
}

function toggleDivEx(sourceElement) {
    // определяем активный контейнер: следуя логике документа, он находится на два уровня выше ссылки-источника события
    container = sourceElement.parentNode.parentNode;

    // из всех ссылок выбираем только нужные (классы collapse & expand)
    arr = container.getElementsByTagName('a');
    hrfs = new Array();
    for (i = 0; i < arr.length; i++)
        if (arr[i].className == 'collapse' || arr[i].className == 'expand')
            hrfs.push(arr[i]);

    // из всех контейнеров выбираем только нужные (класс content)
    arr = container.getElementsByTagName('div');
    divs = new Array();
    for (i = 0; i < arr.length; i++)
        if (arr[i].className == 'content')
            divs.push(arr[i]);

    for (i = 0; i < hrfs.length; i++)
        if (hrfs[i] == sourceElement && sourceElement.className != 'expand') {
            hrfs[i].className = 'expand';
            divs[i].style.display = 'block';
        } else {
            hrfs[i].className = 'collapse';
            divs[i].style.display = 'none';
        }
    return false;
}

function WithSpaceSeparators(value, relaceTo) 
{
	value = (value) ? value.strip() : "";
	if(value.length == 0 && relaceTo) return relaceTo;
	else return value.substring(0,1) + " " + value.substring(1,4) + " " + value.substring(4);
}

/*дополняет функцию func объектом контроля доступности aroboparam
  параметр aroboparam - текстовая строка или объект со свойством aroboparam */
function aext(aroboparam, func)
{
	if (aroboparam!=null && aroboparam.aroboparam!=null)
		func.aroboparam = aroboparam.aroboparam;
	else if (aroboparam!=null && aroboparam.constructor == String)
		func.aroboparam = aroboparam;
	else
		func.aroboparam=null;
	
	return func;
}

//использование этой функции смотреть тут http://dklab.ru/chicken/nablas/40.html
function newClass(parent, prop) 
{
  // Dynamically create class constructor.
  var clazz = function() {
    // Stupid JS need exactly one "operator new" calling for parent
    // constructor just after class definition.
    if (clazz.preparing) return delete(clazz.preparing);
    // Call custom constructor.
    if (clazz.constr) {
      this.constructor = clazz; // we need it!
      clazz.constr.apply(this, arguments);
    }
  }
  clazz.prototype = {}; // no prototype by default
  if (parent) {
    parent.preparing = true;
    clazz.prototype = new parent;
    clazz.prototype.constructor = parent;
    clazz.constr = parent; // BY DEFAULT - parent constructor
  }
  if (prop) {
    var cname = "constructor";
    for (var k in prop) {
      if (k != cname) clazz.prototype[k] = prop[k];
    }
    if (prop[cname] && prop[cname] != Object)
      clazz.constr = prop[cname];
  }
  return clazz;
}

// Инициализируем таблицу перевода
var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
  trans[i] = i - 0x350; // А-Яа-я
trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

// Сохраняем стандартную функцию escape()
var escapeOrig = window.escape;

// Переопределяем функцию escape()
window.escape = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined')
      n = trans[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escapeOrig(String.fromCharCode.apply(null, ret));
}

function focus(obj_id)
{
    var obj = document.getElementById( obj_id );
    if ( obj != null ) 
    {
        obj.focus();
    }
}

function putInnerHtml( obj_id, html )
{
    var obj = document.getElementById( obj_id );
    if ( obj != null )
    {
        obj.innerHTML = html;
    }
}

function getText( obj_id  )
{
    var obj = document.getElementById( obj_id );
    if ( obj != null )
    {
        return obj.innerText; 
    }
    return "";
}

    function enableMap( name, state )
    {
        var map = Maps[name];
        if ( map == null ) return;

        if ( state == true )
        {
            if (isIE) { 
            // if IE, use the map's container object div 
            map.containerObject.onkeydown = keyDown;
            map.containerObject.onkeyup = keyUp;
            //map.divObject.focus();
            } else {
            //  else use the map's link tag
            map.mozillaLinkObject.onkeydown = keyDown;
            map.mozillaLinkObject.onkeyup = keyUp;        
            }
            
            map.divObject.onmousemove = MapMouseMove;                
        }
        else
        {
            if (isIE) { 
            // if IE, use the map's container object div 
            map.containerObject.onkeydown = null;
            map.containerObject.onkeyup = null;
            } else {
            //  else use the map's link tag
            map.mozillaLinkObject.onkeydown = null;
            map.mozillaLinkObject.onkeyup = null;            
            }
            map.divObject.onmouseover  = null;            
            map.divObject.onmouseup    = null;
            map.divObject.onmousedown  = null;
            map.divObject.onmousemove  = null;
            
            map.cursor = "auto";
	        map.actionType = "";
	        map.clientAction = "";
	        map.mode = "";            
        }
        map.navigationEnabled = state;        
    }    
    
    function CopyText( id )
    {
        var  obj = document.getElementById( id );   
        if( obj != null)
        {        
            var link = obj.value;
            if ( copy( link ) == 0 )
                alert("Ссылка на текущее состояние скопирована в буфер обмена.\nВы можете вставить ее в документ или браузер с помощью\nкоманды 'Вставить' или комбинации клавиш Ctrl+V.");
            else
                alert("Невозможно получить доступ к буферу Вашего браузера.\nВы можете скопировать текст ссылки с помощью \nкоманды 'Копировать' или комбинации клавиш Ctrl+C.");
        }        
    }
    
    function copy( text ) 
    {
      if (window.clipboardData) 
      {
        window.clipboardData.setData( "Text",text );           
        return 0;
      } 
      return 1;
    } 

